Having done serial and parallel port control a few times, here are some of the things that I've found:
Most serial and parallel ports send output as pulses. So if you want to "turn a line on" you have to build some hardware to latch that state (I built a simple circuit with line 0 of my parallel port as the clock input on a latch, so everytime line 0 pulsed, the values on the other lines were latched). Some parallel ports can hold line states, but not all parellel port hardware supports this. Reading input is easier.
Serial and ethernet are pulse oriented even more than parallel ports are. Since bytes are sent 1 bit at a time, more external hardware is needed to latch or read multiple lines. 100baseT ethernet uses 2 wires for input and the input is differe
ntial, most chip sets (all that I know of, but I can't speak for ALL of them) require these lines to mirror each other and can not read each of these wires seperately. The read on them is basically edge triggered based on divergent changes (pulses). Output is differential as well.
I can't speak about USB since I haven't worked with it much. But then it is a Serial Port isn't it? Should send data out in a pulse train.
Parallel port is easiest for "hardwareless" DIO. Hope this answers some of your questions.
Rob