In OSGi, I can export a service interface and run concurrent implementations of that interface on the same VM. And I can selectively migrate my app to use a new interface without restarting the app. Is JavaRebel capable of doing the same ?
OSGi and JavaRebel are not mutually exclusive. JavaRebel reloads changed classes, OSGi lets you manage modules/bundles granually. OSGi won't reload your classes, it will let you load new versions of modules/bundles.
JavaRebel works with OSGi, specifically the development of Eclipse plugins using Equinox(implementation of the OSGi) bundles.