The purpose of the 3rd-level domain (username.company.tld) is to give users their own URL context.
By own URL context I mean not only public profile (as it was already mentioned here), but rather a way of keeping semantic-only information in path part of the URLs and moving owner information to the 3rd-level domain (i.e. grouping the data associated with the customer or company or whatever and using 3rd-level domain as a key to that data).
Many blogging services uses such a scheme (LiveJournal or Blogger to name a few), so, for example, profile page of any LiveJournal user will have an URL like this:
http://username.livejournal.com/profile
Where 'username' is the name of the LiveJournal user and '/profile' is a data associated with that user. Post URL will have the same structure.
So, if your service main purpose is to store or manipulate user data (blogging, project management, image storing, etc) rather than to provide some generic functionality (search engine, news, etc) it may be a good idea to define such contexts.
AFAIR some time ago where were some security benefits (or at least talks) of handling a 3rd-level domains (and assigning auth-cookies to them and not to a parent domain) but it seems like it doesn't improve security nowadays.