I've had nice experiences with diplomacy. Although I agree that there's some tuning needed, I can tell that I've been able to make a lot of sense so far of the diplomacy game.
In my last game, I decided to go for a diplo win around the time when I hit industrial era. I looked carefully over the civs on the map, and immediately made conclusions of who is friendly/unfriendly with who.
There was just one more civ on my continent - treacherous Iroquois who had backstabbed me previously when I was warring with Ethiopia (which declared war on me and who had become really inconvenient to me by spreading their religion); I had already killed Ethiopia. On another continent there were Denmark, Sweden, Spain and Songhai, and on a very big island Siam.
I understood that there could be no friendship with either Sweden or Denmark, and figured that Siam and Songhai, who were in conflict with them, were good for befriending (even though my friendship towards Siam would be bitter - I knew that I would have to compete for city states against them a lot). So I carefully nurtured this friendship, by trades, denouncing the civs they disliked (Sweden and Denmark), and later agreeing to declare war against Sweden together with Siam.
The good relationships with both of them stayed till the end of the game, even while I was ruthlessly taking over city states from Siam (via quests, gold and coups) and while both Siam and Songhai took Freedom while I had chosen Order. I never got a warmonger penalty from them, simply for the reason that I had taken the care to become friends first. Note that I steamrolled over Iroquois (who unsurprisingly DoW-d me again) and took their capital (although I didn't fully wipe them off), and I had the warmonger penalty shown for Sweden, Denmark and Spain - but the guys who had already been my friends never brought it up.
---
As for city state politics, I can't agree with the OP's point of view. The city state you're allied with isn't an extension of your empire. You can't really claim that a war against a civ to protect a city state is a just thing. Maybe that city state is blocking that civ's way to expansion, or maybe it holds some important resources, or maybe the AI just sees some profit in it. This is not your territory, and thinking that it is merely shows you as an imperialistic civ. If you DoW another civ over it, then it's fair that you get the penalty in the eyes of the world.
The game does in fact give you some tools here. First, you can pledge to protect a CS, not just get allied with them. In that case, the attacking civ would come to you and give you the option to revoke your protection or keep it intact. Choosing the latter you get a relationship hit only with this civ, not others. After a few hits like that, the'll likely DoW you anyway, so you won't be the aggressor.
As for the suggestion for Casus Belli: I'd welcome it, but only if it was very carefully implemented. The problem is that it is subject to very wild abuses. If you see that a civ constantly bullies City States, just ally with one that is close to them, and prepare your invasion army. They'll attack the CS, and then you pretend to be the savior of minor nations, while in reality you are the scheming villain who had staged that whole thing to safely tear territory from another major civ, without angering others.