GPIO Expander with isolation
You can use the usual shift register like the 74HC595, and use optocouplers for passing the data, clock, and latch signals. The LVT-847 is a quad optocoupler which costs less than a dollar in 1s at Digikey. Note that its speed is limited to less than 100 kHz.  

edit
You comment that you want to read output status as well. The MCP23S17 is a 16-bit I/O expander with SPI interface. SPI needs 4 wires: SCK, MOSI, MISO, and SS, so that the quad optocoupler still will work. If you need more I/O you can hook up extra MCP23S17s to the same SPI bus, but you'll need a separate SS line for each expander. Just add optocouplers to each of the pins coming from/going to the microcontroller (SPI master).