id just yoink the stick select out of the launchers and allow bindings to every stick on the system. selecting one stick makes things easy because bindings can simply be axis1 or button2, indexing into whatever stick is the chosen one. if you add multiple sticks you then need to bind something like stick3:axis4, or stick2:button1, bringing fourth the problem of non-numeric indexing (especially if you use guids instead of stick indices). then to deal with users plugging and unplugging different joysticks into the system, drastically changing the configuration and causing total chaos.
thing is you dont need to say goodby to numeric indices. if you can say axis1, button2, you can say axis42 or button350 just as well. you just need to scan every stick on the system, figure out its axis/button count, then allocate space on a master list of axes and buttons. these indices are then used for bindings, and wraps functions to get the state any button or axis on the master list by the appropriate sdl calls. for example, masterFakeJoystick:getAxis(12) or masterFakeJoystick:getbutton(69).
to keep track of everything, build another list where each entry is a joystick, using the guid as the unique identifier (thats what guids are for after all). this maps physical controls into the master list in a very permanent way without confusing the code. this keeps track of every joystick the user ever had connected to the machine when the game ran, and stores mapping information to resolve big number indices to their device-local equivalents. new joysticks are, scanned, and mapped into the master list, old joysticks are retained for later use. this list has to be saved to avoid a particular stick's master list indices from changing.
this is a good opportunity to shoot down, once and for all, the one stick limit.