You picked a particularly rare example. Meaning it was a combination of unexpected use case and 10+ years of deprecation happening to coincide at the wrong time and place.
Even if you had your supposed compatibility layer in place human error or misunderstanding is still going to cause issues like this from time to time.
The DT_HASH issue was specifically NOT an api breakage. It was some apps consuming some internals without keeping track of changes. Yes, they technically broke backwards compatibility. But those apps weren't supposed to be using that field for a long time.