Cycling the parallel port fast enough to introduce PWM effects without flicker is doable, but kinda CPU consuming. The PWM will also have some variability that may be visible due to OS scheduling issues.
The programming in basically identical to what you'd be doing on a microcontroller, but you're using your PC's CPU and the parallel port for I/O. Many microcontrollers actually have dedicated hardware for this (often referred to as an "output compare" unit or "PWM" support on their timers), so the program might actually consist of "set everything up then go to sleep".
Current ratings on PC parallel ports vary. Most are good to 10-25mA sink, but may only be able to source 5-10mA. You can use some transistors to increase this dramatically with very little complexity. Of course, many PCs these days lack parallel ports entirely.
If you just wanted to turn them on and off, parallel port is nice and easy, but for PWM effects, it can get a little rough. Certainly doable, but I'm guessing you've got better uses for those CPU cycles.