You could end each function with a jump through a function pointer. Then you can set those pointers to whatever you want, altering the flow.
Generalized, a pretty solution is to have an array of function pointers. Then you loop through the array and call each function. If you want to change the order or call different functions, just modify the array.
Generalized, a pretty solution is to have an array of function pointers. Then you loop through the array and call each function. If you want to change the order or call different functions, just modify the array.