this has been an interesting topic, so what the hell, here's my two cents. for my vm's, i have a list off packages that i install as soon as the minimum/base install and reboot is done. 4 vm's, testing, stable, centos7, opensuse. i have no gui's on these only cli, just need to know how to configure things for other os's than debian and it becomes a simple cut and paste to get a system to be at what i need.
have a home partition, not just a home dir, and back it up often with a timestamp on it, and do a --get-selections and dump it to a file that you back up also. also doing that is an easy way to compare what was installed and what is now installed. keep sensitive config files in a spot that you know is going to be backed up or on your home partition so they aren't overwritten with a new install. there was a suggestion about using a live distro to make a back up right away, never done it before, yet this is a great idea. i believe that someone (smarter than me) could write a simple script to put all user installed programs into a file and then reinstall them after a full-reinstall. i.e. bash_install_script.sh check if su add package to list continue with the install take care em