You can use two shift registers, one for reading the inputs, the other to turn on the LEDs.
For inputs a number of 4021 can be used, while for the outputs you can consider some 74xx595.
You should be able to do all of this with just 5 I/O lines:
1 common clock
1 data in from the input shift reg
1 data out to the output shift reg
1 load for the input shift reg
1 strobe for the output shift reg
You could even do it with 4 lines, if you strobe and load at the same time, but the code gets more complicated.
If you have I2C, there are I2C expanders that you can use. Check out the NXP (Philips) website.