I think the reason behind that unordered enums trigger a compiler error is that would break (or make unintuitive and error prone) the simple case of not declaring the values of enums: type unordered_enum = enum a = 1 b = 0 c, # now what? is it 1 or 2? Run
As for wrapping C libraries, I know I have dealt with it in many times, just declare a Table[int, string] and sort it before writing the nim definitions.