I had this issue recently in an '02 and think I just fixed it. It had sat for two years, the water pump was leaking and replaced, so I flushed it last Summer. I started getting it back on the road again and low heat was observed as ya'll are seeing. Low blower speed it'll be warm but turn it up and it goes back to cool. I pulled the two hoses that feed the heater core and one was dry (the left one) while the other was wet. I ran a common garden hose through it and mud came out but cleared up quickly. I don't think that was the issue but it surely wasn't helping the matters. Here I simply think it had low flow to and from it already and mud just collected.
Staring at the metal tube arrangement that feeds it, I really don't see the core being positively force fed if ANY air is in the core or the lines. Knowing that the core is pretty full after the garden hose flush, I hooked it all back up, topped off the tank (over filled actually) with RO water, and brought it up to temp. When the temp gauge was straight up and down and holding, turned on the heat...much better but not hot. There has to be air in there still. The right heater supply was hot and outlet on the left was still just warm. Top and bottom rad hoses were hot, so I decided to massage the upper hose (just squeezing and letting go). I felt and heard air so I kept massaging it until no more air. At that time I had to grab some welding gloves and really giving it a hard squeeze for about 5 minutes repeating what I'd done before. Using a laser temp meter I then saw the hoses were the same temp finally! Cranked up the heat and like magic it was blazing hot just like it was back in 2002! I ran it for a while longer just to make sure, turned it off, did it again...got heat again. So I think it's fixed. I should also note that about a quart of water from the over-filled tank was used showing that it replaced some air pocket, assuming in the upper rad hose and the rest of what was in the core.
What I think is going on here is that if the tank ever goes empty you run the chance of air-binding the heater core. The bottom of the tank seems to be about an inch lower than the top of the heater core. The water pump will feed the engine block just fine and all seems normal according to the gauge but the two lines that feed the core from the lower passenger side of the engine assembly may not have any motivation to be fed with heated water. I just don't see it being positively fed at all times and situations as the pump isn't positive displacement...it feeds and circulates what part is primed with water while the air bound part may just trickle.
Some notes here just for the curious that are still Googling and finding this thread:
1) I've never been able to get that allen head set screw out of the upper rad hose neck. It's stuck and no impact is getting it off this 14 Jeep. Looking at the assembly to replace that entire section stops me short of stripping out the threads. Water was there and massaging the hose motivated it up and into the upper radiator.
2) The most easy thing to do in a low heat situation is to pull the tank (two 10mm nuts and a few spring clips), Remove the two hoses that go into the firewall (two more spring clips), and run water through it. If water flows, its not clogged. If it's dirty then clears up, it had low flow but still seems good to me. Basically, this is a simple check and no need to replace the heater core if it flows really well...that's not the problem.
3) Heater core replacement costs are quite high and $1,200 does sound right. It's a cheap part but all the money spent is in labor as it usually is when a shop is doing it. It's a PAIN to replace and if 2) is fine, why waste the money? Hate to say it, but our Kelly blue book values are pretty low and can shade tree our way around this pricey (or a very time consuming) replacement job. Just spent $1,200 on a transmission on a $2,500 '95 miata so it comes down to how much you value these aging friends of ours.
4) Keep coolant in the tank! When it goes low, bad things seem to start happening and we get to this point. I've found no less than 10 different forums asking this several times in each on this short era of Jeep KJ's. I had a 15yo learning to drive, never mentioned it had no heat but made sure it had oil and tires were up to pressure...so that's good. The tank got low in my case and think that's where it all started. As stated, the tank gets stained and the "full" level is at the seam of the tank. Pulse the upper rad hose to see the level change. Just looking at the tank can leave you simply looking at a stain when it's dry. See 6)
5) That lower hose with a spring inside is very common, even back in '60s model vehicles. That's the suction side of the pump and it can collapse without it. If you don't feel one, the hose has been replaced and the "mechanic" didn't put the spring back in. Get a spring in there! The top doesn't need it because it's under pressure, not suction.
6) Parts are not being made for this anymore and it's a search to find replacement parts like the reservoir tank. I've tried to clean it with no luck and it's a heck of a search to find one to replace it. That airhose from the filter box to the inlet resonator? Mine cracked in '07. Nope, can't get a replacement...finally got sick of monthly duct tape fixes and bought an AEM intake kit. Not to be cool or expect 800HP gains, but I had too because I can't find that $50 part that keeps dirt out of my engine. Point being, it was available in '07 and we need to stay on top of these things. If you can find a new tank now, I'd do so before we suck them up and we're off to ebay knockoff items.
7) Hope this TL/DR post helps. This is the best thread I've found and figured since we're still searching for this problem I'd pour it out here and attempt to add to it with my thoughts.