That is done to track bounces. If an automated email is sent to an address, but that address is setup to forward once or twice and bounces somewhere along that path, by the time the bounce gets back to the original (automated) sender, it may otherwise be impossible to figure out what the original address was. With unique addresses like that, bounces can be tracked.
Doesn't a bounce usually include the Message-ID of the original message, along with a lot of other cruft? I can understand small teams doing this as a quick fix, but companies like Twitter should have no trouble keeping a large dict of Message-ID => account ID.
'Usually' but definitely not always. Account ID is also usually at the application level, while Message-ID originates lower, at the mailserver level. When the app posts something off to the mailserver, how is it supposed to get the Message-ID back?
At least with the cruft, bounces are just handed back to the app to deal with.