Something like:
#define shiftRegisterCount 4
byte shiftRegister[shiftRegisterCount];
void setRegisterBit(int i, int v) {
bitWrite(shiftRegister[i>>3], i && 7, v);
}
void updateShiftRegisters() {
digitalWrite(latchPin, LOW);
for (int i=0; i < shiftRegisterCount; i++)
shiftOut(dataPin, clockPin, LSBFIRST, shiftRegister[i]);
digitalWrite(latchPin, HIGH);
}
(untested, not even compiled!)