All switches, knobs, and LEDs are working correctly. I haven't installed the light sensor yet.
The last two hurdles were the encoders and the Nav ID switch. The encoders were missing steps when spun too fast, and I was getting worried that the Atmega 32u4 I selected wasn't fast enough to poll all the hardware. Unfortunately I didn't think to set up the encoders on interrupt pins, so that option was out. Thankfully, it turned out that the lag was being caused by an unnecessary call to millis(), which apparently is quite slow. Once I removed that I was getting perfect performance no matter how fast I spun the encoders.
The Nav ID switch was a problem because I set it up on PD5. Arduino Leonardo maps that to the LED TX indicator, which inhibits the ability to use it for input. Obviously I could have gotten around this by customizing the pin mapping, but thankfully there was an easier option. I included an extra analog pin input just in case I wanted to support Nav volume in the future. No sim I'm aware of actually supports this, so it was a purely speculative bit of future-proofing. Since I don't need it right now, I just plugged into that port instead. The one frustration was that it took some digging to figure out the digital pin number for PF0. This diagram told me it was analog 5, but I had to dig into the pins_arduino.h file to map that to digital pin 23.
Note: the LED displays look MUCH better in person.