Yeah, that's pretty much it: By default, contracts can't be updated, but you can create a network of multiple contracts to allow some of your code to update. Myself, I think this is "cheating" and destroys the value proposition of ethereum... a better approach (and what I hope to do) is to keep my main contract(s) alive for all eternity and just add new features with "accessory contracts" but it's easy to fail with this if the original contract has problems.