Well, I think it's a real problem for the dispatcher not to know the difference between abstract interface methods and infrastructural methods, which is why Perl 6 introduces the concept of "submethods" that are callable from outside the class,
but only if there's an
exact type match on the invocant.
Otherwise the dispatcher keeps looking for a more appropriate method or submethod to dispatch to.
(There's also the concept of completely private methods that aren't visible from outside the class at all, but that's really a different beastie altogether.) Anyway, I think use of submethods would probably solve the first problem of the OP.