In principle, what you've done is all you can really do short of [MAN1] Join Group PLAYER.
You could probably afford to increase the loop delay as the unit will take a couple of seconds to react to the command - that might smoothe things out a little. Secondly, you could check the distance between the two to stop MAN1 moving when he's already close enough to the player:
#follow
?(MAN1 Distance PLAYER > 10): MAN1 domove (getpos PLAYER)
~5
goto "follow"
You could also offset the position so MAN1 doesn't try to mount the player if he stops, say:
#follow
?(MAN1 Distance PLAYER > 6): MAN1 domove [2 + getpos PLAYER Select 0, 2 + getpos PLAYER Select 1, 0]
~5
goto "follow"
He'll aim for a point nearly 3m NE of the player. You can get him to move behind the player, but you need trig for that!
Welcome to the wonderful world of OFP scripting.