ColdFusion array is one unique data structure in ColdFusion. Unique in the sense that this is the only data structure that is passed by value and not by reference. I do feel it is a limitation sometimes but thats legacy and can not be changed. (You would not want us to break your code. Would you? ;) )
There does exist one hack if you absolutely need to pass the array by reference. Here is a code snippet that uses pass by reference.
<cfset x = ArrayNew(1)>
<cfloop from=1 to=5 index=i>
<cfset x = CreateObject("java", "java.util.ArrayList").init(x)>
<cfset x = "after the method call">
<cfset x = "end of method call">
<cfset ArrayAppend(arr, "from function")>
So what did we do here? We created an ArrayList from the ColdFusion array. Since ColdFusion Array is an implementation of java.util.List, almost all Array functions work on all implementations of java.util.List. And this list implementation will not be passed by value but will be passed by reference. Thats the power of using java in ColdFusion !