1. There is nothing wrong with this approach. (as long as you don't rename the functions). We do the same in our game - function names are stored in arrays, JSONs, instance variables etc. And we call them by name using a bit of scripting. Scripting in C3 is supposed to complement the event system. (although some people are making entire games with JS)
I find it easier to save the function name in a local variable - this way you don't have to pick the object instance in the script:
runtime.callFunction(localVars.funcName)
2. File names are case-sensitive, I remember having the same issue. Rename the file to all-lowercase. You may need to re-import it to the project. And use all lowercase in AJAX request.
3. Construct is very user-friendly! I believe you can even use emojis in function names, but I wouldn't do it :)
4. Correct. The structure of events is very important. Construct runs all events from top to bottom. Any "waits" will delay the execution of actions in this event and nested sub-events. But they won't delay events which are on the same level.