Textures are not limited to 16x16, that's just the default aesthetic of Minecraft.
It is recommended that you keep your textures square/rectangular and separate. And let Minecraft stitch them all together.
However if you MUST use a pre-combined texture. You just need to set your UV's in your model file correctly. Such as Instead of using 0, and 1. Use 0 and 0.333333 if it's a 3 column texture.
setBlockState(state.with(integerProp, state.get() + 1))
// then
setBlockState(state.with(booleanProp, false))
// is not the same as
setBlockState(state.with(integerProp, state.get() + 1).with(booleanProp, false)
Does that make sense?