Upgrade scripts wouldn't be a problem as we'd just CREATE OR REPLACE all the offending packages and of course chase down every reference in the toolkit sources. That's the headache ...
We'd just make sure that standard OpenACS and dotLRN packages work.
There's no way to upgrade user's custom code so we'd just have to document the changes and force them to do it manually. They'll have their own custom types with "delete" in them to chase down, etc ad nauseum.
Upgrading custom code would be a hassle because of this but since we can't write the upgrade scripts, writing them wouldn't be a problem!
"when to do it" - that's the question. 4.7?