I have a multi-tierd, multi-pronged approach to this.
First thing of note: I don't really use anything that has licensing issues -- if one computer dies I just install the appropriate software on a new computer. This is partly due to heavy use of F/OSS and partly due to working at a large university with site licenses for just about everything, and partly due to maintaining VMs for certain things.
First I split personal data into 3 catagories.
1. configs and code
2. documents and personal media (things i made myself, and some other stuff that is rare or whatnot)
3. other media
I also keep track of things with an orthoganal index:
1. Public
2. Work
3. Semi-private
4. private
The first index defines how I store the files. Config and code is kept in a set of git repos. For code, it is simply one repo per project. For config it is a mix/match sort of thing that has organically grown over the years. Documents and private media are a combination of Dropbox and tarballs on my shared hosting account. Other media is mostly just kept on a home file server with good raid. It could be backed up elsewhere, but really it is all re-gettable, even tho to do so would be a pain.
The other index is where things get a bit interesting. This is where access control comes in, and some scripts and so on.
For instance, public code is easy, just let googlecode or github do the hard work
Private code and configs are all in dvcs, with my "central" repo on shared hosting, but dvcs... backup is built in.
The other media is mostly just for home use, or is music and moves around on private mp3 players or usb sticks. It is effectively ignored for the rest of this.
For personal documents and stuff, I maintain a second directory structure and links (sym or hard.. depends on OS and my mood that day). The dirs correspond to the privacy levels, and possibly extra descriptive tags like which work, or whatnot.
Finally I maintain a set of scripts for various operating systems which allow me to fetch the data I need from my places. My first step on logging into a new work server box is to wget $myurl/work-server.sh and run that script. It downloads usefull things like .vim, .bashrc, .profile, my personal ~/bin and so on. Then I am good to go, full environment at my fingertips. Similar for a new work laptop (which is in the semi-private realm), and so on.
It requires a lot of up front effort, and some additional maintainence effort, but overall makes things pretty smooth. It gives you the added benefit of being able to work just about anywhere, since your environment can follow you around.