What is basically needed is a n x m block matrix (n inputs to m outputs) with each block being e.g. 5x5 (assuming 4 directions and a single firebutton, GND and +5v being common to all and thus not part of the matrix).
The Amiga keyboard e.g. is a 6 (rows) x 15 (columns) matrix so it reduces to a 1 x 3 (6/5 x 15/5) such block matrix.
So, assume one wires input up, down, left, right, fire to rows 0,1,2,3 and 4 respectively (row 5 unused)
And output1 up, down, left, right, fire to columns 0,1,2,3,4 respectively
and output2 up, down, left, right, fire to columns 5,6,7,8,9 respectively
and output3 up, down, left, right, fire to columns 10,11,12,13,14 respectively
then to map the input to output2 one would have to depress 5 keys:
The one at the intersection of row0 and column5, or "/" on numpad
The one at the intersection of row1 and column6, or "8"
The one at the intersection of row2 and column7, or "U"
The one at the intersection of row3 and column8, or "H"
The one at the intersection of row4 and column9, or "B"
(for complete example matrix info see
http://amigadev.elowar.com/read/ADCD_2.1/Hardware_Manual_guide/node017A.html)
Now of course noone would be crazy enough to make such a cumbersome switcher out of a real keyboard, but it fully demonstrates the idea.
All's needed is re-implementing the matrix as desired and installing a 5-pole single-throw rocker switch to the "useful" intersections.