You could create two counters. One counts the amount of functions it still has to execute, and decreases that by one after each execution. The second one could be a counter using millis() math to check whether or not 10s have passed after the last execution.
You should try to keep as much of your functionalities outside your function calls. Try to only increment the “functions left to execute” by 1, and check for that in the loop. That should be more reliable.