A native implementation of PSR-0 using only the autoloader from the PSR-0 example in the spec would expect a folder structure like this:
League\Oauth2\Client\Foo = myapp/somefolder/League/Oauth2/Client/Foo.php
League\Oauth2\Server\Bar = myapp/somefolder/League/Oauth2/Server/Bar.php
If I was making these as packages, I could make them into two packages, which would be installed in different locations, because thats how Composer rolls:
League\Oauth2\Client\Foo = myapp/vendor/league/oauth2/src/League/Oauth2/Client/Foo.php
League\Oauth2\Server\Bar = myapp/vendor/league/oauth2-server/src/League/Oauth2/Server/Bar.php
Who the hell said that PSR-0 sucks? I general I think it is very much in the right direction. I have said this MANY times.
What I'm trying to get through is that there are problems that need fixing. And the one you're ignoring here is very much a problem. If I can get it to fatal error on valid code, it's a problem. End of story. The problem exists, because the fatal error exists. Done. End of story.
Ignoring the problem, or trying to justify it by saying "it's not a problem with Composer" ignores the fact of how specifications work. And how they are supposed to work.