It doesn't make sense. If Janeway was unhappy with Kim, she could have sent him to go scrub Neelix's pots or something instead of working on the bridge. So she really should have promoted him after 2-3 years. It's not like spending a long time as a Lt. Cdr. or Cdr., that's almost to be expected. The Ensign to Lieutenant JG promotion is almost automatic if you manage to keep breathing for two years without really screwing up. It doesn't necessarily have to come with a job change, if there are limited jobs available, it just means you're eligible for a Lt. JG job if one comes up. Janeway was really screwing up Kim's career by denying him a routine promotion. Any captain is going to look at his record and think he must have screwed up but somehow escaped being booted out of the service, and looked for some other lieutenant to have aboard. Kim is probably going to leave Starfleet and go pilot freighters.
I get that it's a way to show reverence and a plot device to show how, for example, Admiral McCoys career continued in it's excellence after we last saw him but surely some characters stagnate or are happy being Lieutenant.
People like to feel that their hard work and/or loyalty is being rewarded in some manner. Raises are good of course, but it's nice to get a new title too.