Having private variants and fields would be useful, yeah. Std cheats a bit with its ErrorKind::Uncategorized unstable+hidden variant to have something unmatchable.
Probably because non-exhaustive enums didn't exist when it was written?
Probably because non-exhaustive enums didn't exist when it was written?