Or the USPS 'city' names for places in NYC that are not in Manhattan or places in the San Fernando Valley and the other outer neighborhoods in the City of Los Angeles? Why not 'New York, NY' instead of 'Flushing, NY' or 'Bronx, NY' or 'Los Angeles, CA' instead of 'Chatsworth, CA' or 'San Pedro, CA', for example?
Can't speak to the Los Angeles example, but for New York City this is necessitated by street names being reused in different boroughs. There are four distinct and unrelated streets named "Broadway" within New York City, for example - the famous one in Manhattan which also extends into The Bronx and beyond, and then Queens, Brooklyn, and Staten Island each have their own.
So, "100 Broadway, New York, NY" would be ambiguous if addresses throughout the entire city were written as such.
Of course, this doesn't explain why Queens continues to use the names of the independent towns it consisted of before it joined New York City in 1898 rather than simply "Queens". That can't really be attributed to anything other than old habit which the post office has helped perpetuate.
Well, if post office allowed addresses of ActualTown, NY, ZIP things would be easier.
What actually makes things difficult is USPS's desire to correct address to PostalTown, NY, ZIP even if there is no ambiguity. Maybe mail piece would still be delivered, but address checking tools do correct it; and certain types of mass mail require checked adress.
That would correct half of the problem. The other half, however, where ZIP codes do not follow political boundaries, remains. From a data analytics perspective, this is agonizing.
A few years ago I used to maintain a spreadsheet for work that had a list of locations we needed to have someone go pay a visit to. These locations needed to be sorted by county in order to assign who went where. I had initially started doing so manually, but it quickly occurred to me "hey, I have the address, I can probably write a lookup formula for this"... I then started collecting data to try and build this and realized it was impossible since, nope, you can't singularly tell what county an address is in based on its ZIP code - some ZIP codes contain parts of more than one county. So I had to keep looking up and typing the county names in manually for each site.
I suppose I could have fudged it and assigned ZIP codes which straddled the line to whichever county it looked like the majority of it was in and called it good, but that's just not tidy.
When you consider municipal boundaries, there are thousands of examples of little tentacles of cities that jut into the gut of a another city. Should those tentacles be served by their actual city's post office, who might be five or six miles away, or by the closest post office, who might only be one or two miles away, albeit in a different municipality? There are examples near me of streets that have houses in multiple cities - houses on the same block, on the same side of the street. Should we send two different mail trucks in, each serving the handful of houses in their own city? Wouldn't that become a shining example of government inefficiency and waste?
That would be wasteful, but deviations of ZIP code boundaries from municipal/county boundaries do not typically appear to exist for this reason. Rather they exist simply because the postal system was set up ignoring the political boundaries when it could have been done in a just as effective way that respects them. Take a look right next door to my West Harrison example in Greenwich and Stamford, Connecticut and you will note that the ZIP codes there follow the town lines. It's not rocket science to do this, the person setting it up just has to give a sufficient quantity of shits.
Meanwhile if you really have a case where the most efficient way of getting the mail where it needs to go involves pieces of two towns getting their mail from the same post office, this could be handled simply by allowing that post office to serve two zip codes (one for the piece of its service territory in each town).
Some codes have been divided. Some place names most likely have changed to keep up with changing political boundary changes or especially name changes. But they can't keep up with every consolidation, division, annexation, incorporation, etc.
I will grant you this - my own perspective on this matter is colored by having grown up in a part of the country where municipal boundaries are for all intents and purposes static. I am aware that in much of the country they are more subject to change. I do think the parts of the country where annexations, incorporations, etc. are common occurrences really ought to reign these practices in. But if that is not going to happen then yes, this does present a logistical challenge to maintaining ZIP code alignment with municipal boundaries. Especially when municipalities start drawing non-compact, gerrymandered borders for themselves and taking on ridiculous shapes by doing so.