Construct almost always runs sequentially. The only time anything runs in parallel is when something is farmed out to a worker (like path finding).
so the answers to your questions are: false, false, false, true, true.
calling a function is no different than copying and pasting the actions from the function and putting them where the function was called from. (Except that in the function, it doesn't have any objects picked).
calling a function from a function is no different - actions still run sequentially. Recursively calling the same function works the same way too...
Events with a trigger can be executed out of order, otherwise an Eventsheet executes sequentially top to bottom - following function calls as necessary.
One very common area people have trouble with is knowing when things take some time to finish - like creating an object, a new object can only be picked after the next top level event from where it was created (except that it can be picked by its UID before that). "Wait" also gets people in trouble all the time...
There are lots of other things that take time to finish - AJAX calls, Local Storage reads and writes, Browser resizing, etc.