Okay, so you are changing series resistors to control the current (not the voltage) across the LED thereby controlling brightness? THe forward voltage drop across LEDs (and all diodes) is fixed so you can't change that.
From what you have said, it's all in the code. That's the wonderful thing about PICs. Most PICs can drive 25mA of current which is enough to light one LED to the max. So basically, all you have to do is take the LEDs, connect their cathodes together and connect each anode to a separate PIC pin (through a resistor of course). Then you have the button connected through a debouncer to another pin. I don't know any debounce circuits off the top of my head, but a debounce IC is overkill for this since you only need one. But if size is an issue and you don't mind getting one, go for it. No harm done. That's what samples are for right?
The rest is code. Just have a counter or something to count the number of presses and have it reset every 4rth press. The PIC can set the appropriate LED pin HI (and the other LED pins LO) based on the number currently in this counter.
-Let the 3 LEDs and their corresponding pins be labelled LED0, LED1, LED2.
-Counter goes from 0->2 (0->3 if you want to have a state where no LEDs are on).
-set other two LED pins to LO and set pin LED[counter] to HI; pin LED[counter+1] if you want an off state where no LEDs are on
-every button press increment/cycle the counter 0,1,2, 3 (if needed)
-have the software periodically check the counter and update the HI/LO on LED pins
If you want to adjust brightness of the LED or something, then you could use a digital potentiometer instead of a fixed resistor. The digital pot would connect to the PIC through some serial pins that you would use to control the resistance.