Basically, your question comes down to this:
"How to generate two PWM signals with only one timer."
(Once you've got that figured out, you could set up 6 PWM channels)
Keep in mind that there also are PWM generator IC's, if you don't want to use up all your timers, which can be usefull for other things.
IF you really want to set all outputs to toggle at the same time (based on your code example) why won't you just use one PWM signal, and drive all the 4 devices with the same signal? (Given you're not going to change it)
IF you're going to drive motors, why would you need 4 different PWM signals? It's often enough to only use one PWM signal for the right tires/tracks and one PWM signal for the left tires/tracks.
Setting the max
Since we want to generate different PWM signals from one timer, we can't just make the timer overrun (and generate a pulse or switch polarity at that point).
We want to let the timer run to completion over and over, and only change the signal when it reaches a set value.
The datasheet tells us this:
The TOP value can be assigned to be the fixed value 0xFF
(MAX) or the value stored in the OCR0A Register. (328P datasheet 15.2.1 Definitions)
Setting a limit per pin
We want to set 2 limits on one timer, each timer has an output compare register (OCR), the action will be generated when the timer hits this value.
The Timer/Counter (TCNT0) and Output Compare Registers (OCR0A and OCR0B) are 8-bit registers. Interrupt
request (abbreviated to Int.Req. in the figure) signals are all visible in the Timer Interrupt Flag Register (TIFR0).
All interrupts are individually masked with the Timer Interrupt Mask Register (TIMSK0). (328P datasheet 15.2.2 Registers)
Extra info on compare
Below you can read some extra info on the signaling.
What actually will happen, depends on how the WGM
15.5 Output Compare Unit
The 8-bit comparator continuously compares TCNT0 with the Output Compare Registers (OCR0A and
OCR0B). Whenever TCNT0 equals OCR0A or OCR0B, the comparator signals a match. A match will set the
Output Compare Flag (OCF0A or OCF0B) at the next timer clock cycle. If the corresponding interrupt is
enabled, the Output Compare Flag generates an Output Compare interrupt. The Output Compare Flag is
automatically cleared when the interrupt is executed. Alternatively, the flag can be cleared by software by writing
a logical one to its I/O bit location. The Waveform Generator uses the match signal to generate an output
according to operating mode set by the WGM02:0 bits and Compare Output mode (COM0x1:0) bits. The max
and bottom signals are used by the Waveform Generator for handling the special cases of the extreme values in
some modes of operation (”Modes of Operation” on page 98).
The actual settings are different per mode/modus, but for fast PWM we have:
Table 15-3. Compare Output Mode, Fast PWM Mode(1)
COM0A1 COM0A0 Description
0 0 Normal port operation, OC0A disconnected.
0 1 WGM02 = 0: Normal Port Operation, OC0A Disconnected.
WGM02 = 1: Toggle OC0A on Compare Match.
1 0 Clear OC0A on Compare Match, set OC0A at BOTTOM, (non-inverting mode).
1 1 Set OC0A on Compare Match, clear OC0A at BOTTOM, (inverting mode).
The table tells us we need to set COM0A1 and COM0A0 to 1.
COM0B1 COM0B0 Description
0 0 Normal port operation, OC0B disconnected.
0 1 Reserved
1 0 Clear OC0B on Compare Match, set OC0B at BOTTOM, (non-inverting mode)
This table tells us we need to set COM0B1 and COM0B0 to 1.
If it's all set up, we only need to put the PWM in the right mode.
Mode WGM02 WGM01 WGM00 Timer/Counter TOP Update-OCRx TOV-on
0 0 0 0 Normal 0xFF Immediate MAX
1 0 0 1 PWM,P-Correct 0xFF TOP BOTTOM
2 0 1 0 CTC OCRA Immediate MAX
3 0 1 1 Fast PWM 0xFF BOTTOM MAX
So we'll need to set WGM02 to 0 and WGM01 and WGM00 to 1, to use fast PWM.F
You should now be able to change the PWM's of these pins by setting the output compare registers of these.
Getting the double PWM of the other timer ready, shouldn't be much more different.
Be sure to set the right prescaler. Though it depends on a lot of external things.