Here is another theory based on historical linguistics: I think the offense partly comes from it not being grammatical. The same is true for "French", "English" or "Welsh". These are older nationality adjectives. (Slightly over-simplifying, the -ish/sh/ch ending is Old English; the -ese ending is French; the -ian/an is Latin, which, counter-intuitively, is often used more recently to make nationality adjectives in English.)
The older words (-ish/-ese) are adjectives, nouns referring to the language, or collective nouns referring to the people (eg the English, the Portuguese, the Japanese). Many of these have different words for individuals (eg a Spaniard, a Scot, a Swede). The newer words (-ian/an) are adjectives, nouns referring to the language, or nouns referring to individuals (eg an American, a German, an Ethiopian). So referring to "a Japanese" would be like talking about "a furniture".
Also, there is a derogatory sense of words ending in "-ese", as we can see in words like "legalese", "officialese" or "educationese", but it's difficult to say whether the suffix "ese" is intrinsically derogatory, or whether it became derogatory because of anti-asian discrimination.
To add confusion, some of these adjectives have come into English from other languages (French or Late Latin) and some have been made in English. When countries have appeared or come into view needing an adjective, using Latin has been the default. Also adding an "n" may be natural for countries ending in "a" such as Korea or Malaysia. But Asian countries have often had "ese" applied, such as Taiwanese (who used to be called Formosan) and Vietnamese.
More interesting still is Congolese, which used to be Congoese, but was replaced by the French word Congolais.