Kotal has only been good in the comic which was from Kittelsen.
In the comics, he was as poor an emperor as he was in the games; consistently making bad decisions. His portrayal in-game and comic was consistent.
You can't tell me he isn't a joke when he got killed in his own reveal trailer,
Sub-Zero has been killed in far more trailers throughout the years. He's not a joke.
lost his title in the story mode,
All four Kahns loose their title throughout the Story Mode.
Other characters get mutilated, tortured, crippled, and killed. Taking only the first game into account, Shao Kahn alone: Kills Dark Raiden by mashing his head in, breaks Kung Lao's neck, kills Shang Tsung draining him of his power for his wife so she can go and murder all the heroes, orders his "daughter's" execution, condemns all the dead souls to NetherRealm's service... I'm sure I'm forgetting some. And that's just one character in one game.
got his ass beat again while healing from a broken back
Again, paralleling with Shao, but this time in the current game: Got brought back from the past only to be beaten by Kotal in a straight up fight after getting kicked around by Liu, fled, gets used and betrayed by the titan, gets beaten and blinded by his "daughter" and can't reclaim his throne, gets healed and gets his throne back only to have his soul stolen at his moment of victory due to hubris.
He's a fucking joke joke.
Compared to other characters, he's not.
I think he's a great ruler too. He treated his people fairly for the most part.
He deposed Mileena for power, and through his reign he kept executions, brutal displays of violence, and torture on his to-do list. He also committed genocide. He had become so power hungry and cold, that even Jade was taken aback, and then challenged him.
Wasn't perfect, but he genuinely cared for his allies which was super fucking rare for a "villain".
Depends on which ally. He's no where near as merciful as you're painting him to be. He's also not a "villain."
The Kotal Kahn you're talking about and frustrated over doesn't exist. You're projecting what you want the character to be, as opposed to what the character has always been.