The problem is that many Java libraries feel over-designed compared to similar libraries for other languages. Java is the only place where you will find a class like FrogNibbleAdapterFactoryFactory :)
Several of them are over-designed. But the biggest issue, IMHO, is that the lack of closures (which is planned to come in the next version) made a proliferation of classes that would have been removed. Just pass a closure instead. Lock api's from the concurrency package are full of examples of this.
I don't know if this works on clojure, but Jruby and Groovy solved this partially, by making closures convert into such interfaces automatically. This however, does not solve the problem of the multiplication of classes.
True enough. In those cases, standard operating procedure is to hope that someone already wrote a nice Clojure wrapper for the library you want to use. Or, you read the javadocs once, then write the Clojure wrapper, and release it for other people to use.