I get the concept, but I find it unattractive in practice just because it means you have different variables being treated differently in the out-contract depending on whether they are references or values.
Not really. Think about those as about variables that were passed to the function (and their state after function returns), not function parameters. Then it makes perfect sense.