Note how each function runs very briefly and returns to loop() so the next one can be called. None of the functions tries to complete a task in one call. And there may be dozens of calls to a function before it is actually time for it to do anything.
You would probably be better using millis() rather than delay and track the time thus you can get the arduino to perform an action at whatever time you would like and control it individually for each servo. If you are using delays then the arduino is not able to process anything else until that delay is up and so could only work on one servo. Make individual functions and call them in loop when the appropriate conditions are met. Then the arduino can check if the appropriate delay time has passed for one servo again and again each time it runs through the loop while also checking for the other servo in the same way.
Your way is linear and slow:
do something (very little time)
wait a while (loads of time)
do something else (very little time)
wait a while(loads of time)
Alt
check if something needs done (milliseconds)
if something needs done do it (milliseconds)
check if something else needs done (milliseconds)
if something else needs done do it (milliseconds)
The second way can loop thousands of times for every loop of the first way. It is fast enough that it appears that 2 things are done at once. It can activate one servo and then carry on checking to see if the other servo needs activated or if the first servo needs deactivated etc