I'm just a normal Debian user, not a developer, but couldn't this be solved by creating a new virtual package, perhaps called init, which would then be marked as essential, and make sysvinit or upstart a provider of the init package, as well as any other init implementations which are compatible with sysvinit style scripts. This way, you could still ensure that you have an init implementation to be able to boot, but not have this current problem of sysvinit clobbering upstart.
I'd also think that this could help with the migration to upstart, which has already been suggested last year. While I do realize that the logic behind how they operate is different, upstart does provide a sysvinit script compatibility, so experimenting around with a virtual package for providing init may be a good transition step. Later, for script migration, you could then have another package, probably called upstart-initscripts, which could gradually be built to optimize for upstart use, and eventually replace initscripts as a requirement for upstart. Any reason as to why this sort of a solution wouldn't work?