It is called: "Making an honest attempt to help you avoid shooting your own toes off".
By forcing you to specifically reference the class name along with the variable name (that includes the top scope $::foo), it saves you extensive grief down the road when you eventually end up with the same variable name in multiple classes.
Or would you rather have to track all the variable names in all the classes you use (the ones you write yourself along with ones you pull from places like the Puppet Forge) to ensure unique variable names ?