To clarify: by "bypassing scope rules" I meant that code from the _tables_ module somehow knows about the _hash_ proc defined (privately!) in your code. Seems strange to me, but maybe I don't know all the rules.
As for whether the behavior is supposed to be as it is: as I recently learned, the answer to this is likely "It is as it is now, this will all be fixed with VTable types."