mechmouse: MOst software isn't portable because they rely on shared libraries of code (Direct X, .net, java, Visual Studio, and so on)
If every one made their software portable, you'd end up with hundreds of copies of the same libraries.
Yeah, like with DOS games. I miss those times, to get rid of a DOS game you'd simply delete that game directory, and that's it.
mechmouse: Even worse, old buggy or exploitable versions libraries will be left with out updates.
On the other hand, you can be sure that each and every game is using the libraries they work with. None of this "your game doesn't work because your PhysX version is too new" crap. I've lost count how many times new NVidia Geforce graphics drivers break some older games.
Then again, retroactively adding support for new hardware becomes a problem... So yeah, both ways have their pitfalls. Frankly, I'd just want that both options existed, ie. by default a game would use shared libraries, but in case of compatibility problems (or if you indeed want a fully portable copy of your game), you could override those by simply copying the needed libraries inside the game directory.
I actually recall doing that in the past, e.g. with the old Windows game
Scorched Planet. It's Windows version had 3Dfx Voodoo (Glide) support... but if you used newer Glide drivers, you'd end up with blue graphics all over, some sort of compatibility problem. IIRC you could override that problem by copying older Glide stuff (drivers?) into the game directory so that they would be used, instead of the newer and incompatible shared ones.