It sure does seem that a package is a package and that it should be plug & play.
All things being equal, for the most part it is true except for 4 areas.
1. Compilers (and libs) vs. Source code.
2. Scripts (to startup, shutdown restart, change run level, how it run, when it is run).
3. Dependency (new or old functionality is dependent above and below within a compatibility stack.) I. G. python 2.5, gcc 4.1.2, libdata (ide to scsi)
4. New stuff (SELinux, LVM, tool sets, GUI's)
If you know how to and what to do with the above then you can do a lot, like make your own distribution. But you still need one more thing, a sane package manager.
And to make that sane, you needs a set of finite rules and standards for creating pakages, how they are used and what resources they use, etc.
And this is why the newer the tech and spec, the backwards compatibility fades into yesteryear, as the "change" seeps into the consciousness of the fearful.
And then, TA-DA, the future explodes into the present, for short visit.