Obviously the first answer is to try to avoid running into this scenario by having some flexibility in storing additional fields using maps (example). However, let's think about the scenario where this wasn't done.
Say you need additional storage for something and that wasn't built into the original contract and upgrading the contract using lambdas or a delegate isn't possible because the new storage fields need to be under a specific contract.
How would a migration for the existing data look like? Is it feasible to this without giving the admin developer too much power?