Primitive variables (like integers, strings, etc...) are passed by value and variables of type object appear to be passed by reference. But technically everything is passed by value. Since you can only change the attributes/associations of an object and not the object itself in microflows; objects behave like they are passed by reference.
Everything in microflow, just as in Java is passed by value as "The actual parameter (or argument expression) is fully evaluated and the resulting value is copied into a location being used to hold the formal parameter's value during method/function execution" (see Java is Pass-by-Value).
This means it will work in the same way as Java does. Primitive values will not change in calling microflows when changed in submicroflows, but changes in members of objects defined in a Mendix metamodel (as those objects are represented by a non-primitive type in Java) will be reflected in the calling microflow.
Summarizing, it's not necessary to return objects from submicroflows for the situation you described.