To call a bad Muslim 'bad' or calling a non-Muslim "Kafir"at his face or at his back is to make him firm in his sins. No one likes sarcastic or straight forward criticism (personal attacks) even if it is 100% true. This is the worst mistake some of the religious people (in present age) do, i.e. to point finger at sins of others and find flaws in their beliefs, while being lenient towards oneself and one's own belief system.
The prophet (saw) never degraded a person by telling him his faults or ridiculing his belief system at his face or at his back. He only preached good manners and values through love and wisdom in a generalized manner. Even the worst enemies of Islam who didn't accept Islam after losing battles and seeing miracles of the Prophet (saw), couldn't control their heart from accepting Islam after seeing the manners, sincerity and kindness of the Prophet (saw).
If only people like me correct their manners and develop love in their heart for their opponents (along with sincere prayers), more people would be attracted towards their belief system.
I partially gree with you upto some limit but sometimes you have to do what you have to do.
If display of good manners and love was a one size fits all solution, Allah taala would have never made JIHAD a faraz.
Now a certain small group of people who call themselves Muslims believe that JIHAD is no longer a faraz but that's just a very tiny fraction.
Dr. Zakir Naik (a human computer) answered this very question by a Hindu very well. (you can search youtube for this video).