+1  A: 

There probably isn't any programming language that supports overlapping scopes in its formal definition. While technically possible, it would make the implementation more complex than it needed to be. It would also make the language ambiguous as to accept as valid what would very likely supposed to be a mistake.

The only practical use I can think of right now is that it's less typing and is written more intuitively, just as writing attributes in mark-up feel more intuitive without uneccessary quotes, as in <foo id=45 /> instead of <foo id="45" />.

I think that enforcing nested structures makes for more efficient processing, too. By enforcing nested structures, the parser can push and pop nodes onto a single stack to keep track of the list of open nodes. With overlapped scopes, you'd need an ordered list of open scopes that you'd have to append to whenever you come across a begin-new-scope token, and then scan each time you come across an end-scope token to see which open scope is most likely to be the one it closes.

Although no programming languages support overlapping scopes, there are HTML parsers that support it as part of their error-recovery algorithms, including the ones in all major browsers.

Also, the switch statement in C allows for constructs that look something like overlapping scopes, as in Duff's Device:

switch(count%8)
  {
   case 0:  do{ *to = *from++;
   case 7:      *to = *from++;
   case 6:      *to = *from++;
   case 5:      *to = *from++;
   case 4:      *to = *from++;
   case 3:      *to = *from++;
   case 2:      *to = *from++;
   case 1:      *to = *from++;

              } while(--n>0);
  } 

So, in theory, a programming language can have similar semantics for scopes in general to allow these kinds of tricks for optimization when needed but readability would be very low.

The goto statement, along with break and continue in some languages also lets you structure programs to behave like overlapped scopes:

BOLD: while (bold)
 { styles.add(bold)
   print "BOLD"

   while(italic) 
    { styles.add(italic)
      print "BOTH";
      break BOLD;
    }
 }

italic-continued: 
    styles.remove(bold)
    print "ITALIC"
Mark Cidade