In CSS codes, the reason this happens is because the Z observable is protected by the Z stabilizers and the X observable is protected by the X stabilizers. But the Y observable is protected by the combination of the X and Z stabilizers.
When you transversally initialize in X, you get all the X stabilizers right away, so you can protect the X observable.
When you transversally initialize in Z, you get all the Z stabilizers right away, so you can protect the Z observable.
When you transversally initialize in Y, you typically get none of the stabilizers right away. So you can't protect anything when initializing in the Y basis.
In some CSS codes you can form Y stabilizers as small products of X and Z stabilizers. In these codes you may learn enough to start protecting something. For example, in the color code the X and Z stabilizers are right on top of each other so you can take their product to form Y stabilizers. When you transversally initialize into Y, you get these small-product stabilizers. And you can keep computing them from products of stabilizer measurements in future rounds. That's enough to protect the Y observable. So the color code ends up with transversal Y initialization. But it relies on this special can-get-protective-Y-stabilizers-from-products property, which is not shared by all CSS codes.