To some degree, ext4 does this -- for that matter so does ext3. However, if one group gets full, an allocation is going to come from a different group, possibly one containing blocks from elsewhere, and they all share the same journal, the same inode tables, the same superblock and so on. Fundamentally there are a lot of shared data structures there, and if one of them gets corrupted, every related structure is at risk. (Also, e.g., a mv between two distant directories on the same filesystem is not normally expected to move all its blocks from one group to another, but on different filesystems, it does.)
With entirely independent filesystems, this problem goes away -- and moving *that* down into the filesystem is redundant, because we already have the ability to do just the same thing by making more than one filesystem.