There is no way to express that a variable is, or that it must be, “a reference to this-or-that.” In this particular language, at this particular time, the concept simply does not exist. And it will bite you sometimes.
Sure, but how would that have helped the OP? Even if he had the opportunity that declare that the values of %h3 and %h3 where references to hashes, it would not have prevented the OP getting confused.
IMO, the OPs misunderstand had nothing at all to do with Perl have untyped variables. (Note BTW, that while Perls variables are untyped, its values are not).