Must block contents be stored with the proof that they haven't been changed?
Sounds like you are describing a pruned node. As of Bitcoin Core 0.11, you can run it with the experimental -prune=N option, which only keeps the last N megabytes (min 550) worth of blocks, plus the UTXO set. In 0.11 it is only useful for some RPC commands and mining, but it disables the wallet due to being too experimental. In 0.12 the wallet function will be available in pruned mode.

All blocks and headers are still downloaded and validated fully, but the old blocks are deleted from disk occasionally.

Also, I think it is a bit incorrect to say that hashing power prevents modification of the block chain. Block chains are by means of hashing always immutable and only append-only. However, in the presence of multiple valid competing block chains, most hash power decides which one is to he accepted.