There are actually ways to minimize the number of pins for 74HC595, by cleverly using capacitors to control signal timing:
If you use Arduino for ESP8266 (https://github.com/esp8266/Arduino), you should be able to use LiquidCrystal_I2C library directly with no modification. Also, you can buy I2C LCDs that have built-in PCF8574 so that saves one chip.
With the shift register trick, I think it’s possible to eliminate a separate I/O expander chip. I do think it’s necessary to have an ADC chip — the PCF8591 chip I used for OSPi is probably sufficient, and there are tons of alternative ADC chips out there.