Can anyone shed light on why a I2C PCF8574 LCD driver would only be using I2C 'read' operations to 'write' to the device?
The PCF8574 has no concept of registers, as it has a single data register.
The standard protocol of reading a register means first the register address is transmitted, and then the data is read back.
Therefore, when the I2C library is commanded to do a register read, the PCF8574 understands the transmitted register address as data write. Also, when the I2C library continues to read data, it actually just returns the data register contents.
So, why someone would use I2C register read function to write data? No idea. But it works.
Perhaps the code was written by someone that does not know the API has also a function to write a single data byte. Or maybe it did not work or exist when this code was written.
Frankly, this means that for each API call to read a register, there are four bytes transmitted on the I2C bus, which makes this extremely slow.