This is one of the very nice things about lisp (and other interpreted languages). You need not "re-compile" anything. The compiling happens on the fly while the code runs. Even if you've "compiled" your lisp into FAS / VLX files, those are bit-coded files and not binary executables - they're still interpreted just optimized. Thus you need not even re-"compile" them.
With DotNet it's a bit of a borderline case. There are basically 2 reasons why DN needs recomiling: (1) the DotNet 4.0 has become a requirement from ADesk's side for 2013, where 3.0 could be used in 2007 through 2009 upt to 2012, and 3.5 for 2010-12. This usually happens every 3rd release. (2) But ... due to ADesk also changing the API itself, since 2013 it needs to link to other files and there are some changes to the source itself. Thus 2013 simply does not work with a DLL compiled for an earlier acad.
About what to do to ensure as few required "upgrades" to your lisps:
Actually, if you run into a situation where the prompts for commands have changed ... it's 90% of the time a situation of the prompt's shortcut keys (those shown as capitals) being changed. So for me I always use the full word of the prompt instead of just the one or two characters. E.g. in your code I'd change the CHPROP line as follows:
(command "._ChProp" "_Previous" "" "_Layer" ".Sketch" "")
That way even after ADesk changes the shortcuts in a future version you won't have to update a single thing (at least in that line). It's extremely seldom that they'd change the entire name itself. Also note I've added the underscore to the command call as well ... thus making it language independent for the command name also.
If you stick with this principal and follow a generic method for the pathing and such (as described by dgorsman) then I've never come across anything I have to change in old lisps to have them run in newer acads. And that is since 2000 all the way through to 2013. The only thing I remember having to change was when they introduced MDI (mutiple document interface - introduced in R12 or somewhere in the mid 90's) ... but that simply required me to rename the ACAD.LSP file to ACADDOC.LSP and all worked perfectly again.
The other way round may be an issue. If you've written a lisp using the new (since 2012)
properties functions, then you cannot expect that same lisp to run inside 2010/11. So you'd need to stick with lisps using only the functionality available in the oldest acad throughout all your distributions. Similar applies to 3rd party apps like dgorsman's already said.