Emergent behaviour has caused headaches for game designers for a long time now: basically, the answer is to ignore the nondamaging parts (let players stack paintbrushes to get wherever they want if they really want to), and code around the damaging bits: instead of having keys that you can knock off the edge of the world, either mark them item as unsusceptible to the physics simulation, or have something else instead of a key - a lever, a keycode, etc.
Many also mark quest items as "important" and if they are destroyed (eg by falling outside the skybox and into the "object destruction" drain), respawn them either in the user inventory or their initial start point.
The best solution, though, is to avoid singlepath bottlenecks in sandbox games. Aim to always have more than one possible solution to a problem, to allow for multiple different play styles, and multiple different ways of messing up before you complete the mission.
Can't unlock that door? Then blow it open, lockpick it, smash a window and deal with the alarmed guards, stack crates to get in through the roof, lure the inhabitant to come out and unlock it...
Yet another game programmer