I think macros are the most straightforward here. You can do it with macros for the wrong keys only, at the cost of the flash persisting through its timeout, even if you press the right key before that.
You can do this because macro actions will be called even when there are no events on the key, in every scan cycle. This is precisely this way to allow implementing functionality that runs when the key is idle - such as timing out some animation!
This example is somewhat similar, at least in spirit. Instead of setting all LEDs, you’d only set two: the wrong one and the bad one, and instead of setting all to black, you’d call LEDControl.refreshAt()
for both keys, to reset them to whatever color the LED mode set them to. (And obviously, the layer changing code would be exchanged for the printing stuff.)
Hope this helps!