No compiler vendor back then wanted to give up on their own specific deviations, given their existing customer base, proprietary OSes and extensions.
So many of those vendor specific features got tucked away into implementation specific and UB buckets.
So from the point of view of a C compiler that exploits undefined signed overflow, if your code could overflow, it was probably already buggy, and you should have fixed it.
(One problem with this line of reasoning is that it kind of also applies to unsigned numbers, but there C goes the other way.)
Then there's the matter if ((char )0) causes a trap or not; on systems without a MMU, it probably won't trap [1]. It's differences like overflow and memory references that cause most of the UB you see in C.
[1] On Linux, you can map a page to address 0. But that you can, doesn't mean you should.
I could be wrong though, after all compilers back then were a lot less clever than now so maybe they couldn't really make use of this information. I'd be curious to get a first hand testimony as to why certain UB exist in the first place.