In addition to dinput, winmm, and xinput, joysticks can be accessed through user32 via the raw input API, and listed via WMI. There's code floating around that uses xinput in conjunction with both of those things.
Xinput combined with WMI: https://msdn.microsoft.com/en-us/library/ee417014%28v=vs.85%29.aspx XInput combined with raw input: http://snes-sdk.googlecode.com/svn/trunk/bsnes/src/ruby/input/rawinput.cpp
Note that in both of these cases it's expected that the device list returned by dinput is consistent with that returned by WMI and raw input, which is another reason it's important to have a common implementation.
I guess having a duplicate input device probably isn't too bad, but I vaguely remember hearing about games that ignore all joystick input if they don't think there's an xinput device available, based on those other API's.
Also, it seems according to MSDN any XInput device should have "IG_" in its name, so any common implementation will have to know whether the device is XInput or not, and probably will have to do the required remapping to the standard xinput layout (which sort of makes more sense than doing it in xinput anyway, as I've noticed games using joysticks through dinput that are hard-coded to expect the xinput layout). So, it seems to me we'd want some sort of "remapping driver" to create an xinput device which is what we actually use for some joysticks. Note that SDL3 has taken the approach of maintaining a hard-coded list of known joysticks with an xinput-like layout (see http://hg.libsdl.org/SDL/file/127fb2272098/src/joystick/SDL_gamecontrollerdb...), which is simpler and maybe better than providing a general-purpose remapping system for users.