If you only have 20 motors with 1-2 enums then I don't understand why you don't just use the current "correct" solution which does not require a hack to do callbacks. Just implement the readEnum method.
What if the device is not connected at iocInit and becomes available later?
I know this is a general EPICS Base issue.
The whole approach of "initialization happens when the IOC boots" lost its appeal since the 1980s/VME. Initialization at any moment, before/during/after the IOC is up, should be the regular case. Btw. PINI is another part of that problem, which is why drivers like Stream and OPC UA have their own handling of (re)initialization.
IMHO, doing requests after connect and callbacks after the IOC is up is the "correct" solution, while implementing readEnum feels more like a hack. Which is a lot simpler and works in many cases, no doubt about that.
Cheers,
~Ralph