But what is the exact reason not to allow the big $8xxxxxxx values in 3.3.1
The enum limitations are relics from the distant past.
(It would be possible to extend/modernize in this regard).
The original Pascal shortly defined: "Enumeration symbols can have values only in the range of -2^31 to 2^31-1".
Nothing about underlying types was specified, but this leads to longint and smaller integers, and disallows DWORD.
And another limitation: For the enum range (low, high) itself, Wirth essentially used the frozen enum, but he was not happy with the frozen enum, so he removed it completely in the first Oberon version. (later, due to critiques about the absence of any enum, he restored the enum again).
In the meantime, Delphi pragmatically added support for enums in API functions, thus enums became non-frozen, although the term "non-frozen" was not known at that time. And FPC kept the original frozen enum (has defined behavior in declared range only).
For DWord, you have several options:
1) DWord constants (I would use this).
2) decimal longints in enum-range (-2147483648, ..., -1, 0, ..., 2147483647);
3) typecasting in enum-range ( longint( $80000000), ..., longint($ffffffff), 0, ..., $7fffffff);
Mapping to longint enum is rather a workaround, because one has also to consider possible side effects:
Are the reserved (nameless) values still defined? Has the value-order changed?
Example: Mapping ($80000000,.., $ffffffff) to range (longint( $80000000), ..., longint($ffffffff))
would preserve all reserved values and also the order, because this is (-2147483648,..,-1).
But the situation would change somewhat if the API constant declaration (DWord) adds a smaller value ( < $80000000) in the future, because in the signed enum-range the new value would be the largest enum.