The reason behind Target Types is abstraction.
In principle, for most implementations, all you need is 2 target types:
On a true global deployment model, "Staging" for your vietnamese editors might be a site running somewhere in APAC, while "Staging" for your French editors could be a site hosted in Amazon Ireland (Dublin).
Here you have 2 choices.
Do the lazy route and do 1-to-1 mappings and expose your editors to unnecessary information - like "Staging AWS Ireland" - or you could link the "Staging" Target Type to the "AWS Ireland Staging" Publication Target in the context of Publication "French Website" and to the "APAC Delivery" Publication Target in the context of publication "Vietnamese website".
By doing this, your editors will always see 2 targets: Staging and Live, and then the content will be published to the correct publication target for any given publication.
As mentioned by @marko milic, you can also set permissions on target types, and, for instance, set all your Chief Editors with permissions to publish to Live. If you followed the abstraction layer I tried to show above, it also means Chief Editors are allowed to publish to Live to ANY publication target that uses the Live Target Type.
Now, you can correctly say "I don't care about that" and consider it overhead. In which case I just ask you to keep in mind that Tridion was designed for distributed publishing - and in that context, the separation of Target Type (a business/functional concept) and Publication Target (an infrastructure concept) makes perfect sense.
More detail here, I like this definition too:
"A Target Type specifies a user-friendly name for one or more Publication Targets."