I Absolutely agree that the shift register technique is a valid, possibly good, method of building a flashing table but it is still multiplexing.
Multiplexing is a term that refers to strategies that permit a single output/input to be used for more than one task by varying its functionality over time.
Mux and DeMux, multiplex and demultiplex, are recognised methodologies used for a vast array of tasks.
Think of it like this ...
You have some stuff to manipulate but you have more stuff than you have control lines.
The solution is to reuse your control lines as many times as it takes to manipulate all your stuff.
It is fundamentally impossible to access all the stuff at once because you can only talk to a 'control lines' worth of stuff at any one time.
However if you do this quickly enough it may not matter, it largely depends on the application.
This is true however it is physically achieved and also just as valid for inputs as it is for outputs.
Going a step further ...
If your individual items of stuff are capable of latching in a particular state IE they are bistable like a a switch, not the momentary button type which is astable
then you control can be tristate meaning that on any particular scan you can set, reset or ignore a given chunk of stuff.
You still only get to talk to chunks of stuff every so often but when you aren't talking to them thy say the way you last left them.
Addressable systems are really just complex forms of multiplexing but are distinct in the way they operate requiring some processing capability within a chunk of stuff.
You still send a string of commands which chunks of stuff respond to and still you only get to command one chunk of stuff at a time.
The only exception to this in addressable systems is that you may have the option to issue global command to which all chunks of stuff respond.
OK now I know that doesn't affect the fact that you may want to implement a sketch based on shift registers but it is always good to understand what you are doing in the broadest sense. Any form of multiplexing is a compromise and how it is achieved is likely to affect the results.
Hay even your Arduino IO is multiplexed in the purest sense ...
The processor only handles one register at a time so it is not possible to switch on a bit in port A at exactly the same time as a bit in port B.
The time difference is so small that it usually doesn't matter, but it could if the application was sensitive enough.