If the contract issuer wants to have a way to upgrade the contract code, so that account data and other things carry over, can Ethereum provide this? Also can this be done without changing the contract address or does one always need to deploy a new contract? 

Do "annex" mechanisms exist to add some new functionality to a contract without a total rewrite?