In other words: the problem isn't that arrays and hashes aren't objects, the problem is that the perl programmer cannot reasonably define his own datastructures that can be accessed using the same interface the build-in types use. It's a problem of (access to/lack of) well-defined interfaces. And I stand by my assessment that tie() is an ugly hack that only half-way overcomes this issue.
That I will completely agree with, tie() is horrid and it would be nice to be able to define something that is compatible with standard @ and % without having to use tie() to get there. The inverse is possible now though via autobox and we have tried to make a semi-standard API (based heavily on the Perl 6 stuff) with Moose::Autobox.