For horizontal movement:
FSM 1
1. Translate horizontally with desired speed
FSM 2
1. Create float variable vertical movement speed and set it to zero
2. Create float variable addition to movement speed
3. Add "Float Add" every frame (addition to movement speed + vertical movement)
4. Add "Float Compare" and compare vertical movement speed with desired vertical movement speed limit
5. When it hit the threshold, "Float Subtract" every frame (vertical movement - addition to movement speed)
6. Float compare again, when it reaches a defined negative threshold, repeat.
Using this way you can get a smooth sine movement, but there are certain cons to this approach, first being the dependence on frame rate because of float imprecision, the second one being making this a bit of a drag to modify amd get the values just right for desired result.
Tweening only vertically while translating horizontally does not work , so it's either this way, tweening the whole path, or code.
Edit: typos