16 separate lines via USB
Have you considered making putting a 595 on each board and feeding through the three control signals instead of the 8 data lines? In this setup you would essentially have each shift register in parallel so that each one loads the same data. Yes it is duplication of hardware, but it does reduce the cable count to only 3.

You then have another shift register for row select. You could do this one by using discrete registers instead of a 595 ICs. Each board would have two registers. The first has a data input from the previous board and its output goes to the next - this then forms a shift register through each board. The second register acts as a latch for the row signal so that it doesn't change while you are loading the data.

This would reduce the number of cables you require between boards to only 4 + power. Plus it allows the number of modules to be increased pretty much indefinitely (limited by how long you have to load the data).

Here is a diagram of what I am proposing:





Another option to the design would be to split out the MCU part and have just one design for expansion modules that can then be connected to any MCU:



The jumper on the expansion board selects whether the data for the row select comes from the output of the 595 (i.e. on the first board), or from the row select of the previous board (i.e. on all subsequent boards). 

This could actually then allow you to have multiple displays showing the same thing - after say 8 boards, you could connect a 9th board which uses the 595 output again to restart the sequence.

I am of course assuming from your original diagram that you are feeding in the row select data from the output of the 595. If this is not the case then you can omit the jumper and use the MCU to control the RDAT signal (marked as optional).