So far most of the tools have been created in a very strict, single purpose way. While that's a good engineering approach it also leads to limitations that are hard to overcome. I do remember the early days of Eclipse when they had to build their own java compiler to be able to pull out enough data for the IDE. And that's the simplest example. Or think of the days before JMX.
Obviously this is not a simple problem to solve. I think the only way we could fundamentally change things is to completely rethink the way programming models/environment are thought.