I believe you should be designing modular software right now. Whether you decide to use a modularity framework like OSGi is a separate decision and is driven by your willingness to deal with some of the challenges. By designing modular software now, you're positioned to take advantage of runtime support for modularity when you're ready.
OSGi is a very mature technology. What's still relatively immature is that the app server vendors have only been working to incorporate OSGi into the app platforms for the past couple of years. Depending on which app server you're using, you may find it's more or less mature. Tooling for the enterprise developer is also maturing.
Dependencies and classloader errors are common for folks new to OSGi because the way OSGi handles these things is a bit different than what we're accustomed to. For instance, if your code uses Class.forName in an OSGi environment, you're likely to have problems. Read this post by Neil Bartlett as an example. OSGi itself is mature enough, but there are some anti-patterns we have to avoid.