A couple of solutions I have looked at in the past include:
arcade usb encoders that are readily available on amazon, often with sets of buttons and micro-switch joysticks. The main downside being I don’t think I’ve seen any with analog inputs, just digital.
ATmega32U4 based Arduinos such as the Arduino Leonardo and Arduino Pro Micro can emulate a USB HID device, so there are plenty of projects out there having it emulate a USB Joystick with programmable button and analog inputs. I actually used this method several years ago for testing Joystick input handling for both RobotOpen’s DriverStation and the Driverstation.js projects.