Hacky method: Repeated schedule setTransform'ing it to whatever position it was when frozen. Use something like the ArrayStackSO + tick functions to use one schedule for every frozen object.
See the gravity gun with companion cube mod. Spawn two companion cubes, stack them, then move the first one from under the second. If you can figure out why the second stays there, you'll be able to freeze objects.
function serverCmdFreezeMe(%client){ if($pref::server::copsandrobbers || %client.sitting) { return; } if(%client.frozen == 0) { %client.frozen = 1; %client.freezeObject = new StaticShape() { position = %client.player.getTransform(); rotation = "1 0 0 0"; scale = "0.001 0.001 0.001"; dataBlock = "flowers"; }; %client.freezeObject.setcloaked(true); %client.freezeObject.MountObject(%client.player,1); } else { %client.frozen = 0; %client.freezeObject.unMountObject(%client.player); %client.freezeObject.delete(); }}