The servo pulse system incredibly simple, as it is based on discrete component electronics dating back to the 1960s. You are probably assuming it to be far more involved than it is!
In the radio control system, the transmitter sends pulses triggered by a daisy chain of timers, each controlled by a joystick pot & triggering the next when it times out, and the sequence re-started every 20mS to 50mS or so. The times between the pulses are the pulse time for each servo in the system.
The radio receiver output feeds a shift register that passes a "1" bit through, moved along by each sequential timer pulse. The time each timer in the transmitter runs for, between 1 - 2mS, sets the duration of the pulse output at that stage of the shift register, so it controls one servo from each joystick pot on the TX.
When no pulses are received for a few milliseconds, it resets and waits for a new restart pulse, to trigger the first output again.
---------------
You are emulating that in software, shifting a bit along the pins on an output port.
You only need one free-running timer and one compare unit, plus a list (array) of time setting for each servo.
The spikes are equivalent are the sequence restart and then at compare match, where you shift the bit along the outputs and update the compare..
Just shift the bit through the port and add the duration of the required pulse for the appropriate servo, that the "1" is lined up with, to the counter present value and put that in the compare register each time a new compare happens.
That gives you up to eight independently-controlled times from a very simple loop sequence.
(You can also use an external shift register IC, just with two PIC pins to drive the data and clock inputs.).