Sounds like the API version problem that would affect any language. If the API changes, you have no choice but to use a specific version that matches your app (without modifying/recompiling the app, that is). Java is the same, and Java apps can specify jar dependencies and versions of those.
But what we're talking about here isn't even that. We're talking about just one application (the app server) that runs multiple, sandboxed pieces of code (by "sandboxed" here I mean keeping these pieces of code separate from each other and potential conflicts, not running in a security-restricted area). You'd have to sandbox this in C or anything else too if it's all running in the same process. What happens if Apache mod_a requires libfoo 1.5 but Apache mod_b requires a more recent and incompatible libfoo 2.0? It's all in the same process. The OS's linker isn't going to just load multiple (potentially conflicting) versions of the same thing into the same process. If you're sharing libs, you'd still have to sandbox the modules within your runtime environment so that the right module hooked up to the right library code and didn't interfere with other modules.
(Someone please correct me if I'm wrong here and operating systems have evolved the ability to automatically know what parts of your code are "pluggable" and need to be sandboxed, or if multiple conflicting libraries can be loaded into a single process with no conflicts... I haven't done systems programming for a few years)
Basically, what you're saying applies to applications using shared libraries, and it's not much different in Java, other than the fact that Java ClassLoaders do the work instead of the OS's shared library subsystem. And when you're talking about one application that loads multiple modules/plugins/applets/whatever you'll have to sandbox them since it's still all running in the same process. This is where OSGi comes in.
(disclaimer: this isn't a Java vs. anything post... just trying to describe why OSGi is useful and why that fact doesn't necessarily mean anything good or bad about Java itself... as for the imports... yep, the language wasn't designed to support "import ... as ..." ... I don't mind that though, since I can count on one hand the number of times it would've been useful to me in my 12 years of Java development... ymmv)