Aaah I've apparently missed (as in misread) what they're looking for and why (thinking that they're objecting to the punctuation-ness). Once you mentioned that I was thinking maybe the tied version captured %+ at the point of tying but experimenting shows it's affected by the global state so no dice there.
I could maybe imagine roughing out some sort of "matching state" context object that captures (ha) all of this stuff and returns an independent instance but that's getting back along the lines of your sample in that you'd need to use something else rather than native m{} or what not.
use Hypothetical::MatchState qw( matchit );
my $match1 = matchit( $_ => $regex );
my $match2 = matchit( $other => $regex );
say $_->named( q{foo} ) for ( $match1, $match2 );
The cake is a lie.
The cake is a lie.
The cake is a lie.