Like John pointed out, you can really use a shift register and keep track of each bit state, changing ones you want. It's easy doing so declaring a byte variable that stores these bit states. You said that you checked some datasheets and didnt found it would work. Maybe because you checked non-latched shift registers? A non-latched one will just propagate each bit on the outputs, it means that when you update all the 8 bits, each output will flip LOW or HIGH accordingly the sequence of bits, this is true for shift registers like 74HC164. To avoid this you can use latched ones, like 74HC595 from arduino tutorial http://arduino.cc/en/Tutorial/ShiftOut
. This way the output will be refreshed just after all the bits are set (or you can control this using the latch line), avoiding flickering the outputs.
I hope it helps