So for now I am dealing with only going to C2, which is really not a big deal for this app.
You know, letting us know what notes you want to synthesize, and how many at a time would be a big help in letting us help you. Also a little more about how much else the cpu is doing would help. Is it just a tone generator, a full digital synth, monophonic, polyphonic, top octave generator, whatever.
Your options are
1 - use one or more timers as a standalone peripheral
2 - use a timer and read the timers in software
3 - use a time as an interrupt source
4 - use an external interrupt
5 - do the counting in software
6 - use a combination of some or all of the above
A really tricky hack would be to set two timers going at slightly different rates so that the difference between the timers would create the frequency you wanted.

It would probably do you some good to read the top octave generator code. Google "top octave", PIC, and "old crow".
The guy generates a full octave of notes without timers or interrupts using isochronous code based