This is what application servers are made for. They face similar issues to provide all their services which must be brought up and teared down in a specific order to keep dependencies satisfied.
You can for example use the JBoss micro kernel which is not a lot more than some classloaders and a JMX engine. You can package your apps as 'sar' or service archives and specify the dependencies in the metadata of these packages.
You can probably do similar things with a stripped down glassfish or using Spring DM server.
Alternatively an OSGi engine like Equinox or Felix can provide similar services.
Another advantage is that you will end up with a lot less virtual machines.