Your #2 is wrong (sorry). Enums in most mainstream languages don't "limit"; they merely specify known values. Unknown values are still possible. For a type-safe enum, see discriminated union.
AFAIK, python, java, rust, ocaml, haskell, and swift all have enums that actually limit values.
https://stackoverflow.com/questions/6282619/is-there-a-way-t...