Another problem with hashes for addresses is that protocol migrations might rewrite the code (e.g. when some instruction is deprecated) and then either the hash needs to be rewritten too, or it will no longer actually be the hash of the value.
It seems OK to me to guarantee that the address is either the hash of the value, or the hash of an old version of the value when the value was rewritten by a protocol migration…