Agree, readability is important.
FWIW, I suspect your code doesn't work since the parser isn't loading globals into the stack since it doesn't know about them at "compile time". They way I think about it is each scope gets compiled as a whole e.g. a function, single CLI command, { local-block }, etc. So the ":global x", in the script's text, is how the compiler knows what globals to load into the function's stack. When it goes to run the compiled script, it then does the parse, but by then it's already decided the variable is undeclared. And in the RSC's scheme undeclared variable are treat as just empty string, not error. Thus your issue.
If the desire is to reduce the number of :global's you need to add for external functions, then could keep functions in the array itself. Only one variable there. Just note that $0 is the first argument with function in array: Positional Arguments in Array Function - $0 vs $1?
But array functions get unwieldy with the ($arrfuns->"myfunction") stuff for every call, and $0 vs $1 get confusing quick.
rextended is right, you better off keep things as separate function, if one needs to call another – just declare it explicitly in the other function