For relays, I used the EA2 PCB style relays from Kemet; there are alternates that fit the same hole pattern. They make a DPDT relay that has 10 pins, is about the size and footprint of a ten-pin DIP IC. Mouser sells these for $2.46 each these days. They have the 5V version in stock in quantity. These are rated for switching up to 1A and 250V, but their main use is in signal switching for telecom setups. The telecom pedigree means that these don't inherently have big clicks when switching, as well as being capable, small, and cheap.
Using the dual coil switching version means that there are two coils, one to set the relay and one to reset it. Pull current through the "set" coil for a few milliseconds and the relay goes to the set position > and stays that way when you stop pulling current<. The reset coil does the same, but a a pulse of current on it moves the relay to the reset position, and it stays that way. If you're not changing the relay's position, you don't have to pull any current at all to keep them steady. So they are very low power: they use a maximum of 200mW during the millliseconds the changeover is happening, and nothing at all when they're sitting still. This can be very low power. They need 25-30 ma of current for the pulses. A simple transistor can pull the currents. You need one transistor for set and one for reset for each relay.
You need to drive the transistor bases with a ... oh, maybe 30mS long pulse once each footswitch change, and you need to remember which way the footswitch was "set" to get the relay to alternate set and reset. So... a flip flop. Rig something so the flip flop toggles once each footswitch change And use the forever-on output of the flipflop gated by an enable each footswitch change. I used a CD4013 dual D flipflop rigged to toggle on each clock pulse, and generated the clock pulse with CD4070 XOR gate.
The XOR gate is a trick. I used one input from the footswitch signal (assumed to be either 0V or 5V; we'll make that come true later) and one input delayed by a series R and a C to ground. This means that for each transition of the footswitch signal, the XOR's two inputs will be different for a short period of time, determined by the RC time constant. It will output one and only one pulse every time the footswitch changes. This signal goes into the flipflop to make it toggle, and is also run into AND gates on the output of the flipflop to tell the transistors to turn on for only the time of the XOR's pulse. The result is that for each edge on the input, going high or low, the set and reset transistor (but not both) alternate going on for a few milliseconds, then shutting off. This is what we need for running the relay.
Almost done. The XOR needs a clean, sharp 0V or 5V at its input to make pulses cleanly. I used a CD40106 hex Schmitt trigger inverter plus two Rs and a C to make a switch debouncer from the probably-sloppy, bouncing footswitch. The footswitch has one side grounded, the other tied to the two Rs. The Schmitt trigger cleans this up to one and only one edge when the footswitch changes.
Having thrown in all those chips (CD40106, CD4070, CD4013, CD4081) they ought to get used. There are enough unused sections in the 4013 and 4081 to do two footswitch outputs. The 4070 has four XORs, and the 40106 has six, so there are enough parts to make a second footswitch to relay driver, as well as using one section of the 40106 as a power-on-reset so the relays always come up the same way when power goes on. I added a rectifier for the presumed 6.3Vac source of power, filter caps, and a regulator to get the ~7-8V from the rectified heater voltage down to 5V for the chips.
So that's it. It's about 1.2" by 5" long and uses a batch of Rs and Cs, but it ought to work fine. Step right up... who's going to prototype it?