And another addition, I've done a fair amount already using C3 arrays but I really don't like the way they work. If the stuff gets too complex, it starts to feel like I'm wrestling with C3 rather than coding.
I agree, that's why I prefer using object instances instead of arrays. A bunch of instances with instance variables basically represent a multi-dimensional array, and it's much easier to work with it.
For example, if you need an array of football players, create 11 sprite instances for each team (they may be invisible or off-screen). You can define many variables (name, score, salary etc), and then easily do whatever you want with events - pick any player or a group of players, filter them by many parameters, make bulk changes, find min/max values, sort, remove etc.
If you still prefer to work with Javascript array, you can return its data back to C3 events as a JSON string, but I believe it will not be compatible with C3 Array object. You can load it into JSON object though. Another option is to return a comma-separated string, which you can then parse with tokenat/tokencount expressions, or use CSV addon to convert to array. Or create a function in the script which will update C3 array with the data from your JS array:
construct.net/en/make-games/manuals/construct-3/scripting/scripting-reference/plugin-interfaces/array