The reason is that when ACL support was made available, not all BlobStores supported blob-level acls. In fact CloudFiles didn't support it at all. For this reason, to support public acls, we made a flag at container level. As ACL metadata doesn't usually come back in headers, this implies looking up a container ACL lazy as you are noticing.
Years have passed. Swift now supports ACLs, so we can do object-level for blobstores (including hpcloud and swift, which currently emulate public ACLs via CDN). Moreover, we could allow for disabling of ACL lookup.
So, that is the history, and this moving away from that would be a nice one for when we enter the incubator.. nudge nudge :)
-A