Private variables are almost like local ones, if you precede every function and method with PRIVATE ALL. But that also contradicts the purpose of private scoped variables to be available in called methods
As it's all about SCATTER/GATHER MEMVAR, the better option is to make use of the NAME object clause.
And you can also regulate array created by A..() functions (like ALINES(), ADIR(), etc) to be LOCAL by predefinig them as 1 element arrays, as all these array functions extend an existing array variable instead of creating a private one. So it's really not hard to have local scoping.
And I'd not consider it a burden to have a LOCAL statement. You can use the LOCAL statements to have a comment about the meaning of the variables and so use this best practice and also document your code at the same time.
One warning about SCATTER/GATHER... No matter if you use MEMVAR or NAME: You're hiding the details here, the code does not show what fields are available and copying over data this way from one table to another similar structured or even into the same table is a bit suspicious anyway, you should just need to refer to the already stored data with a reference - a foreign key field. Exceptions confirm the rule, if the cpied data changes in a process over time, and should be independent from the origin it's obviously okay to copy over something.
One clever use of an object variable can be to scatter the order id from an order record to all orderitems/details while working on an order, as this copy of the id as foreign key is what's supposed to be copied. It's also clever to have a tbale wih Width,Height,Top, Left fields and scatter them to a form object to store and restore form position and size. And in this case you also will need to break the rule to have reserved words as field names.
Chriss