What about this:
--- There is a driver that provides access to the parallel port. Right now it would be just one, but EPP and such could be done.There is an lp driver that uses parallel port access.
There is also a PLIP driver that uses parallel port access.
The Zip driver uses _and_ provides parallel port access. This lets you chain several together.
---It means that the lp driver might really be using a service provided by the Zip driver. It means you could even tunnel parallel ports through something completely unrelated. It means you could have a driver that would do something to the data stream. It means you could redirect /dev/lp0 into the bitbucket, log it, or whatever.
I would imagine that the drivers would pass an int32 that represents the state of the pins on the port. Perhaps a mask could be passed to indicate what pins can not be set with the current chain of hardware.