One problem to be aware of when going for OGSi is, that it uses a class loader for each bundle (=module) to isolate bundles from each other. This is often a pain especially when working with libraries which where not designed to be used in an OSGi environment. In the end, almost all of the resulting class loading issues can be solved, but it can be quite time-consuming to figure things out.
You could also use spring to make your program modular and extensible. Spring's application contexts can be nested, so that a "module" can use the spring beans of it's parent but not vice versa. Spring can be told automatically discover application context files of all jars on the classpath. To model the eclipse extension points with this approach, one module could provide a bean that has a "register" method which other modules can use to hook in.
Using a service from another module would be as simple as getting a reference to the service bean in spring (assuming that the application context hierarchy is set up accordingly).