I have no idea if someone already proposed this since there are so many replies that is actually quite hard to follow.
I’ve seen many people obsessed over how Roam has an id for each block and then they use that id to be able to reference to a given block on a given note.
One way to work around that is to don’t use ids at all and hash the contents of the block instead. This is akin to how git or merkle trees store and addresses all pieces of content. If one changes the contents of a given block, then Obsidian can search and replace the references to the old hash with the new one.
Example: Let’s say you want to reference a block on the note "Block Reference.md with the content of “Obsidian does not need ids”. Imagine that the first characters of hashing that piece of content are “n01ds” (you don’t need the whole hash, the likelihood of collisions on a given note is very low). Then one could reference that block with something like this ((Block Reference#q2pm)). If I changed the content to “Obsidian is awesome” and that content produces the hash “4ws0m”, then Obsidian could replace the old reference to become ((Block Reference#4ws0m)).
Regarding how to produce those hashes in the UI it should be fairly easy: Exactly like it does with headers, but instead of inserting the contents of the block it would insert the n first characters of the hash.
Solved! (or not, I’m just theory-crafting here)