All your issues seems to be mostly relevant when using extern C libs with wrappers. For this case there are two more issues, Nim enums can behave strange when they have holes or start not by zero. I was struggling with that for gintro, but we know that Araq recommends using plain (distinct) int constants for this case.
For your flags example, there we can use Nim's set[enum], which works fine, I used that approach in gintro.
