I don't know what you don't like about SetPlayerSpeed.
It's not that we don't like it. It's that it's highly impossible without engine changes or millions of datablocks.
Or by going with Truce's idea, however, downsides:
-By transmitting datablocks whenever something changes, there'll be lag spikes once this happens.
-By not transmitting datablocks whenever something changes, the movement will be choppy for everyone but the host.