There are PICs with 3 PWM, but not in a user-friendly DIP package.
Use a faster PIC18 (40MHz) and just do it the hard way. As the speed gets above 100 hz, the flicker will only be apparent if it's moving across your field of view.
"Hard way" being that you:
unsigned int ctr;
RED_PIN=red_limit>0;
BLUE_PIN=blue_limit>0;
GREEN_PIN=green_limit>0;
for(ctr=0;ctr<1024;ctr++){
if(ctr>red_limit)
RED_PIN=0;
... green...
... blue ...
}
But when do you get to recalculate the color limits? There are several ways- interrupting this routine would occassionally cause color "glitches", but it probably wouldn't be noticed. This loop could also be a timer interrupt itself, but you'd either decrease the available resolution for each color or have to decrease the frequency you're doing the PWM at.