It was supposed to be protected, actually. Only most popular implementers neglected to implement that “unimportant detail”. And Extended Pascal was supposed to have generics.
Well… what do you expect from the pinnacle of worse is better centerpiece? When B was extended with ALGOL68 features everything that may be thrown out… was thrown out. For how else can you fit the compile in 16KiB (later 64KiB)? But that doesn't mean these things were unknown, back then! They were just considered unimportant… after all if programmer is not stupid s/he wouldn't access things that shouldn't accessed, right?
Rust got, of course, got Rust's “similar enums” directly from from ML… that's half-century ago language.
It's actually true: Rust doesn't include that many “new” things (remember the motto: technology from the past come to save the future from itself), and, ironically enough, while borrow checker is also “only somewhat improved” versions of what other languages had, decades ago (except we talk about very few, rare languages)… but all these other things that fascinate Wojciech Muła so much are implemented in literally hundreds of languages — and way before Rust implemented them.
If “secret of Rust” lies in the standard library. these powerful enums and other things… then why none of the languages changed anything in all these decades?
The answer is obvious: all these goodies were, traditionally, implemented in the tracing-GC based “academic” languages, thus they were “hiding in a plain sight”: they were “very-well-known” for academics, yet, when these things, finally, arrived in systems language people perceived all these things as “new and exciting”.
No, it was borrow checked and precisely borrow checker that enabled the “Rust revolution” — not because all these other things were not important, but because without borrow checker they remained, mostly, in the realms of scientific magazines, and not in hands of practicing software engineers.