I've thought about doing that but decided against it. (I'm kind of a stickler for consistency ingame) In this case splitting vertical from horizontal slabs only makes sense from a coding perspective but not from a gameplay one. It would create this imaginary line between modded and vanilla content that makes it feel detached from the vanilla game. I would honestly go the extra mile just to make additional content feel as integrated and natural as possible even if the result is incompatibility with other mods.
What is the cleanest way of 'editing' vanilla classes? As for more detail to my current predicament: I decided to add vertical slabs to my mod so I wrote a new block template (ComplexSlabBlock) as well as a class for the required blockstates. Most slabs I register with my mod I add with "... Block EXAMPLE_SLAB = register(new ComplexSlabBlock(...))". This method works for new slabs but I can't find a way to make slabs that are already in the game use this template. Simply changing the line "... Block COBBLESTONE_SLAB = register("cobblestone_slab", new SlabBlock(...))" would do the trick. (I don't care about mod compatibility for now) I did some research and found that one way of overwriting classes is "reloading" but from what I've read so far it sounds fairly advanced and easy to mess up so I want to stay away from that as much as possible.