Instead of exposing the painful ritual of public/private key exchange, software developers should instead be using metaphors of human trust and service.
A ‘translator’ service, for example. The user ‘invents’ an imaginary language, then decides who among her friends is allowed to speak it with her. She then instructs her ‘translator’ (e.g. her own personal Navajo) to convey messages between herself and her friend’s translator.
(Only the personal Navajos actually need to speak this ‘language’ of course. As far as the two correspondents are concerned, the only change is that they’re sending the message via the ‘translator’ rather than directly, but even that is a wafer-thin bit of functionality once the channel is established and the communications process automated.)
Quick encryption, well understood, and easy to implement. Most importantly, you don’t have to explain encryption, public and private keys, or any other security gobbledygook to someone who really doesn’t want – and shouldn’t need – to hear it.
Update: Of course, the greatest weakness to this idea is if Microsoft were to create an implementation of this and name it Bob.