You use a CAD program (e.g. AutoCAD, FreeCAD) to create a model to cut on your CNC. You then use a CAM program (MeshCAM, PyCAM) to convert that model into G-code -- a standard language for controlling the movements of a CNC machine. Then you use controller software (Mach3, LinuxCNC, or Arduino-based GRBL) to translate those G-code commands into signals sent to your stepper drivers / spindle control / etc.
When used with CNC the parallel port is just treated like a bunch of I/O pins. Yes, you could wire the step/dir pins on your stepper drivers directly to a parallel port cable if you were willing to accept the risk of accidental voltage spikes or miswiring blowing up your computer, but usually that wiring is done using some sort of parallel port breakout board that includes optical isolation and easy wire connections. There aren't any hard and fast rules that state what pin in the parallel cable controls what function of the CNC machine; this is always set in the controller software. Why the parallel port and not USB? Mostly legacy reasons; nobody has come up with any standards for a USB interface.
When you build your first CNC router I'd suggest starting with a mediocre design. Just use some cheap allthread for your leadscrews and tapped wood/plastic blocks for your leadscrew nuts. Stick with wood for your frame/gantry/etc. What you're going to learn from building this first, cheap machine is going to be extremely valuable when you start planning your second, expensive machine. What you don't want to do is build an expensive machine that doesn't perform well.