If I recall correctly, this is all intended behavior of arrays. Arrays being passed by reference is one of their most valuable characteristics, and trying to change that would break a LOT of existing scripts, to no noteworthy benefit.
The biggest quirk that is probably throwing causing problems for you is how ARMA handles array addition and subtraction. When you do _array1 = _array1 - _array2;, you are actually creating a completely new array in the process, that just happens to contain the contents of _array1 minus the contents of _array2, then assigning _array1 to reference the new array. That's why the variable within the object didn't get changed by the subtraction, but did by the set. Set, select, and resize are the 3 commands that I can think of that for directly manipulating arrays, while addition and subtraction return copies.
And as you mentioned, using _newArray = +_oldArray; creates a copy of _oldArray and stores it's reference in _newArray, and gives you all the functionality you are asking for.
Edit: Relevant wiki article: http://community.bistudio.com/wiki/Array#Changing_an_array