Agree with everything in the previous answer - expanding upon this:
The key information is in the Owned Array description:
"This holds a list of pointers to objects, and will automatically delete the objects when they are removed from the array, or when the array is itself deleted. Declare it in the form: OwnedArray<MyObjectClass> ..and then add new objects, e.g. myOwnedArray.add (new MyObjectClass()); After adding objects, they are 'owned' by the array and will be deleted when removed or replaced."
So the OwnedArray manages their lifetime of the objects that it contains (as pointers) that the user created on the heap - it does not contain copies of these objects. Hence the natural object to return is a pointer. A standard array class like std::vector<T> contains copies of the objects that are added to it and hence the natural object to return is a reference (T&) to the actual object in the vector.
Some useful terms to know are "intrusive" and "non-intrusive" applied to containers:
"...in C++ non-intrusive containers store copies of values passed by the user...On the other hand, an intrusive container does not store copies of passed objects, but it stores the objects themselves"
So OwnedArray is an intrusive container and std::vector is non-intrusive.
I hope this helps explain further.