I do not have a complete answer for you here, I just wanted to meet what the deterbert said:
First, you must have your entire OSGi application.
This is not true. Another approach would be to embed the OSGi container in the host application.
The hard part here is the interaction inside OSGi and outside, because the code lives on separate class loaders.
You can make your host classes visible to the OSGi part by using the path to the OSGi system. On the other hand, more complicated.
One of the ways host code interacts with packages is through an interface that is visible to both the host application and the package, that is, to the host part. Another way is to use reflection.
If you have a clear separation between the host and OSGi, for example, the plugin system, then this can work very well.
The future is under pressure
This can be a problem. OSGi has a lot to learn, and since it is about to hit the mainstream, it still lacks community knowledge, tool support, library compatibility, etc.
The biggest question you should ask at this point is: Do I really need to manage different versions of the dependencies at runtime? If not, that is, you can understand what happens during the deployment (for example, by configuration), then there may be a simpler solution for you.