I think there are two limitations:
- speed of a particular I/O extension, e.g. serial or parallel interface. Use the technique that's adequate for the respective purpose
- total processing capacity. if it's exceeded by the application requirements, change the processor
If you need more I/O pin then use a controller having more I/Os. e.g Pic controllers
come with different number of I/O. 18pin 18f1220 have two I/O ports , 40pin 18f452 has five and 80pin 18f8525 has 11.
Usage of shift registers to add additonal I/Os on board requires more processing time,
You can reduce the processing time by using 8-bit Octal transperent latch (ex. 74ls373) for output port, use 74LS244 for input port, with a decoder (2x4).
Here you need to spare one 8-bit port and two more I/O lines ( to control decoder)
here is a pic of expansion of i/o port 89c51 controller in this pic you can see clearly white female connector in the center of pcb is input from keyboard (8*12)not seen and on the left side three uln2003 for relay out puts ,chip using 12mhz crstal,and other chips ( x-ray equipment control panel )and lcd connection 16*2