Personally, I tracked file/package relationships with a simple script. Easy to do.
Tracking package dependencies is more difficult, and I usually did this manually with some help with some specialized scripts.
Plus side is you can avoid dependencies you don't like and add functionality where you need it. You can make a developers heaven this way. Usually the only way I do serious Linux development is with an LFS-based system. When I use distros I usually spend a lot of time creating a specialized environment and the time saving in using a distro is sort of nullified.
Bad side is obviously if you want to upgrade a vital dependency you'd have to upgrade all forward dependencies also. Not so difficult if you have it scripted, but errors are hard to handle. Of course, an LFSer would usually know how to install different versions of packages and have them co-exist. However, mostly you just want to keep top-level packages updated, which is easy to do (e.g. Firefox, developer tools).
http://www.linuxfromscratch.org/alfs/
Although there's little documentation to speak of, so I can't tell whether it helps with upgrades.
If you want to build from source and tinker with compile flags but also be able to upgrade seamlessly, Gentoo or Arch Linux is probably more appropriate.