One problem is construction. When you need to interact with a library at one remove using interfaces everywhere, you can't simply new up instances; you have to go via factories. And that leads to ugly alien code.
That's mostly a Java problem, though, which lacks first-class types.
That's mostly a Java problem, though, which lacks first-class types.