Your solution requires Other to know the variable names at compile time. I think the whole idea is to preserve the variable names as well as their values.
Why in earth would Other want to unmarshall some variables without knowing what they're called? If it didn't know what they were called, it couldn't very well make practical use of the data contained in them.
package Cow { use Moo; has name => (is => 'lazy', default => sub { 'Mooington' }) } say Cow->new->name