I also think that the DNS analogy is wrong because all callers are hash-based. The only solution I see is to go through the list of all callers and manually update selected ones.
If I understand Unison right, the names are used only on the developer's layer(to write code), but when you save code, it's all hash-based.
Still, Unison got my attention.
Would it not be correct for those callers to keep calling the old (shared) implementation?
But how do you know which name was called where if the callers referenced the content hash not the name?