I've been struggling with the concept of having simple, easy to use packages for pretty much everyone out there, and at the same time have the flexibility to do crazy advanced things like have four different versions of postgres or mysql on a system at once. For most people, they want a simple desktop or simple server machine and want upgrades to be as easy and seemless as possible. If there's a safe way to upgrade postgres 7.2 to 8.1 then that's what I want to happen. But in some cases you need both.
I just realized that in these cases it would be fairly simple to support multiple complete file layouts in each package. Every package will be required to have at least one, the default layout, which will install everything in place assuming that it's the only version needed (a few packages should ignore this and install in version specific places anyway, but very few). When installing a package with multiple layouts the user may either be prompted or an intellegent default choice could be made. Except for dealing with stateful data, the layout could even be changed post-install without too much trouble.
The nice thing about this setup is that it's actually a very minor change to the format of a package. And even better, each layout can include a few unique files that aren't shared in other layouts. For example, if the config file needs to be different by default depending on layout, two versions can be stored in a package, and each layout can include only one of them. Since the file references are effectively inderect anyway, it wouldn't take any changes to the code to support that portion.