I was wondering, can the GPIO headers be programmed from within the OS?
Like can I limit the voltage or current going through the fans if I wanted to.
If you want to programatically vary the speed of the fans this can be arranged with an array of resistors. Not sure about voltages though as the IO pins run at 3.3v
Also, how do the GPIO headers work? How do I program them or what can I do with them?
The simplest pins to use you can toggle on/off and you can do it from the command line or a shell script or some python. See http://elinux.org/RPi_Low-leve......28GPIO.29
for some programming examples.
(Can I add temperature sensor)?
Yes but not so easy - one of the interface boards that are being developed would be easier here.
The golden rule with projects like this is to do the core part of the project first - the case design - and then add the bells & whistles. I'd start with some slowly flashing LEDs on the GPIO first and then build up from there.