I'll add my own two cents. Personally, I find it best to understand the Bacon-Shor code in terms of how one would decode the error syndromes.
Motivating example: Shor code
Since OP seems to already understand the Shor code, let's first see how one would decode the error syndromes in the Shor code. The Shor code is just the concatenation of two repetition codes: an outer X-type code, each qubit of which further encoded in an inner Z-type code. For concreteness, below I will consider specifically the 9-qubit Shor code, which means both repetition codes are 3-qubit codes. It may help to visualize the qubits as in a grid:
1 2 3
4 5 6
7 8 9
Here each row (e.g. qubits 1, 2, and 3) corresponds to one instance of the inner Z-type code.
X errors and Z errors in the Shor code can be corrected individually. To correct X errors, we look at the two Z-type measurements in each row (remember that Z-type measurements are what help correct X errors, and vice versa), such as $Z_1Z_2$ and $Z_2Z_3$. If they are both +1, then there was probably no X error in this block. If one or two results are -1, then which ones are -1 will indicate which qubit among qubits 1, 2, and 3 is probably flipped, and the error can be corrected by applying a physical X gate. (If 2 or 3 X errors have happened in this row, then this goes horribly wrong and results in a logical X error.)
Meanwhile, to correct Z errors, we have to look at each row as a whole, and apply X measurements to two entire rows. This is trickier to implement, requiring weight-6 stabilizer measurements such as $X_1X_2X_3X_4X_5X_6$ (this works because e.g. $X_1X_2X_3$ is a logical X operator for the inner code in the top row). The results of those weight-6 stabilizer measurements are then used as error syndromes for the outer X-type repetition code.
One helpful way to understand this is that we no longer care about whether each of qubits 1, 2, and 3 individually has a Z error; we only care about whether qubits 1, 2, and 3 together has an odd number of Z errors. We don't care about whether a Z error happened on qubit 1 or qubit 2 because $Z_1Z_2$ is a stabilizer anyway.
Bacon-Shor code
The Bacon-Shor code corrects both X errors and Z errors in the way the Shor code corrects Z errors. So we still have weight-6 X-type stabilizer measurements such as $X_1X_2X_3X_4X_5X_6$, but also Z-type ones such as $Z_1Z_2Z_4Z_5Z_7Z_8$.
Doesn't this just perform worse?
Correct! As an example, consider what combinations of two X errors or two Z errors a 9-qubit Shor code can correct. The Shor code can correct two X errors as long as they are not in the same row; in fact, it can correct any number of X errors as long as each row only contains a single error. This is rather obvious since in decoding each row is handled individually. Meanwhile, it can correct two Z errors only when they are in the same row (in which case the error really just corrects itself). Any two Z errors not in the same row will translate to two Z errors for the outer code, which defeats the 3-qubit repetition code.
Since the Bacon-Shor code handles X errors and Z errors symmetrically, it can only correct two X errors when they are in the same column. This is a strictly stronger condition than "they are not in the same row".
So what's the point?
The trick is that even though both types of stabilizers are weight-6, we can actually measure both with only weight-2 Pauli measurements. For example, instead of directly measuring $X_1X_2X_3X_4X_5X_6$, we can measure the "gauges" $X_1X_4$, $X_2X_5$, and $X_3X_6$. This was not possible for the Shor code because e.g. $X_1X_4$ would anti-commute with the stabilizer $Z_1Z_2$. Of course, this works symmetrically for the Z-type measurements — instead of measuring $Z_1Z_2Z_4Z_5Z_7Z_8$ we still just measure $Z_1Z_2$, $Z_4Z_5$, and $Z_7Z_8$. Since those are only gauges and not stabilizers, we don't care if they anti-commute among themselves.
If you smell something weird here (e.g. "Don't the gauge measurements disturb the code state?"), it's probably one of the peculiarities of the subsystem code, which other answers have mentioned. I can add more information if you have any concrete questions to ask.
Conclusion
The Bacon-Shor code trades some "raw" error correcting ability for the ability to extract error syndromes using only spatially local two-qubit Pauli measurements. It naturally generalizes to a $d\times d$ grid, where the locality matters even more. This can be a very good trade-off in the context of fault-tolerant computation, because there the main difficulty is the possibility of an error happening in the syndrome extraction process itself, and the more complicated the process, the more error-prone it becomes.