Let me tell you what's wrong with the built in messaging system in Android.
There should be a clear separation between the text entry / conversation viewing user interface, and the services that can send and receive text messages. Right now, if anyone wants to provide an alternative text message delivery service, they must replace the entire text entry user interface.
Your replacement could store the sent and received messages in the phone's SMS database. But then, whenever you open an unread message you have to remember to open the correct text entry application based on which 3rd party service your contact can use.
You can't keep a conversation going with one person, while automatically swapping between message delivery services based on changing network conditions. Nor can you easily choose which application to use based on other subscription information, eg we both use a 3rd party app like TextSecure. While you can add an app specific raw contact record with a custom action, you can't create anything with the same behaviour as a phone number field.
Application integration with Google Voice, Hangouts & the old Talk app suffer from this same basic problem.
Voice calling has similar 3rd party integration issues, but I won't delve into them now.