The transformation you propose will not change anything. The functions are still de facto functions with changing arguments and so forth.
A number which selects a function in a table is just another form of addressing a function.
The first thing that will happens is that the programmers using explicit "ioctl-like" dispatch with function numbers will not like it very much, and they will write stub routines which hide the dispatch, which will make their code more readable, and let them do things like place breakpoints on individual functions. Those wrapper stubs may well have exactly the same signatures as the original functions and so you're back to square one.
Oh, and on Windows, functions in a DLL are addressed by a numeric index already! A .def
file assigns ordinal numbers to names, or something like that. Look at this MSDN entry.