I'm not asking why they use t.co. I'm asking why it counts against my tweet length. If I want to tweet 140 characters and they interpret some of them as a link, why can I no longer tweet my 140 characters because something on their system turned it into 150 characters? They could shorten it while still using my url's length for accounting. They already let you tweet more than 140 bytes due to unicode so it's clearly not a technical reason such as a char(140) db column.
They very well could simply take min(len(t.co/url), len(orig_url)) without breaking any past tweets or changing the 140 character limit's spirit. It would just behave more logically.