I am not sure what the original design reason was, but I like it this way. I consider globals as internal to a module, mostly an implementation detail, which should only be exposed via accessor functions outside the module.
Eg suppose I have a package for managing some templates, and have a setup like
DEFAULT_TEMPLATE_DIR = expanduser("~/templates")
default_template_dir() = DEFAULT_TEMPLATE_DIR
Later on I can decide to make the global a
Ref, fixing the type, or allow the user to set it via an environment variable and just provide a fallback, eg
get(ENV, "DEFAULT_TEMPLATE_DIR", DEFAULT_TEMPLATE_DIR)
without changing the API. Similarly, I can make a setter function
isdir(path) || @warn "setting non-existent path for templates"
DEFAULT_TEMPLATE_DIR = path
that validates the input.