Eh.. Why don't you just keep a buffer somewhere in your code that contains information about the freezed object. Then when the player freezes it, it copies the transform, the shape pointer, and the things like linear and angular velocity.
Then remove that body from the world, but not the shape, and then create a new one with the same transform that is a static body.
Do this before stepping the world.
Keep a pointer to that body and when the player tries to unfreeze it, remove the static body, use the information in the first-mentioned buffer to recreate the dynamic body and let the world continue.
It might just be a matter of changing flags, but that's a solution I see.