Strings and Arrays are ALWAYS passed as reference (not BYVAL) to any SUB/FUNCTION call according to my findings. Had a similar problem a while back, and did investigate into it as far as possible. It makes sense, as Arrays and Strings arguments in fact are only the start addresses of the string/array, hence references to the actual string/array arguments. In that thinking, it won't probably work with UDTs either (exept if you pass just a single UDT element, not the entire UDT structure).
But as you can use SHARED variables as well to pass variables into a SUB/FUNCTION, I see no reason for bothering the developers, I think SUBs/FUNCTIONs are complicated enough with its internal implementation in QB64.