«Старый способ», который вы упомянули (и тот, который OSGI, безусловно, использует под капотом), заключается в установке собственного ClassLoader для обеих ветвей ваших зависимостей. Так, например, серверы приложений могут запускать как старые, так и более новые версии одного и того же приложения внутри одной JVM.
Читайте об иерархии загрузчиков классов.
В вашей настройке сложная часть - это точка соединения, где встречаются классы из обеих ветвей. Ни одна из ветвей не может использовать классы, загруженные в другую. Чтобы заставить его работать, убедитесь, что только классы, загруженные загрузчиком загрузчиков классов (классы JRE) или загрузчик классов MY.jar, передаются в обе ветви.