Also consider tone generator ICs, which it sounds very much like what you may be doing?
A far out possibility is emulating timers partly in software; you can calculate the time until the next transition, set a timer for that (one-shot, interrupt), and toggle the respective pin. The jitter will probably be pretty awful, but the spectral purity may still be good enough for some RF or control applications, and most likely is for audio purposes. (I've done the simplest version of this before, a timed interrupt on a Z80 platform; it generated a single tone at a time and didn't sound any different depending on what the main loop was up to.)
Taking this even further, CPUs in the ~100MHz range (most second-lowest tier ARMs, say) have more than enough power to simply emulate a synth directly. That is, generating audio a sample at a time, stepping an array of DDSs and, say, running them through wavetables and envelope generators before driving a DAC (or a PWM channel to the same end). If you still need independent square wave channels, you could still do this but output packed binary to a GPIO port, instead of proportional (digitally coded analog) to a DAC; the sample rate does put a hard limit on how well timed the channels are, of course. Again, spectrum may be okay, but getting finer timing is less practical.
Fast CPUs aren't really so much necessary, actually; a multi-channel synth has been demonstrated on an XT PC (8088 CPU), using the timer as a 1-bit DAC. Poor quality of course (~30kHx sample rate at 1 bit gives quite a lot of quantization noise!), but the sounds themselves are unlike almost anything else anyone's ever generated from a PC speaker before. Needless to say, this required heroic effort to pull off (the "8088 MPH" demo, the end of it namely), and I wouldn't expect anyone else to go to such lengths; rather, just to know that it's possible at all!
Tim