The biggest issue is that right now dealing with dependencies is a huge pain in the ass. There is no formal API that people can depend on. There is no effective documentation or rules that people can learn what to use. A programmer has to depend on guessing, experience, and personal preferences. Sometimes they choose correctly, other times they get burned.
The traditional work around is to have distributions put a lot of manual effort into plotting out dependencies and careful package creation. This makes it easy for end users. Unfortunately this is crippled by the massive amount of duplicate work each distribution must perform combined with the lack of manpower.
Effectively it's people throwing lots of hours and effort to work around technical limitations that people don't want to address in the platform.
The upstream application programmer knows most about the requirements of his application so, ideally, he should be the one building the packages and outlining dependencies. And users should be able to go out and download packages from different sources and be able to use them without fear of breaking their systems. Distributions should still collect packages and present them, also and work with upstream to correct packaging issues and bugs and such.
But all of this requires doing things like establishing 'layers' in the platform, cooperation between distributions, formal set of API requirements, and testing and so on and so forth. Nobody wants to do that, I guess.