All messages sent via the iOS Messages app are stored within the app. However, messages sent to and from email addresses are stored in their own message thread. I'll try and explain this with an example below:
Let's say you have a contact whose name is Jane Doe. You have a mobile number and an email address for her. Usually you send messages to her mobile number and you have a long history of messages going back five years, all of which you can view via the Messages app. However, one day you accidentally send her a message to her email address instead. This message is not stored with all the other messages, it is stored under a second thread for Jane Doe, containing only the history of messages sent to or received from Jane's email address.
Using the example above, since both the email address and mobile number are stored in Jane Doe's contact details, you can go to the Messages app and in the search field at the very top, type in "Jane Doe". This will filter your message threads and you should see both of them listed separately. From these you can see all messages sent and received.
If, on the other hand, you had sent a message directly to an email address that isn't stored in your contacts, then the message thread is stored under the email address rather than a person's name. So, if Jane Doe's email address is email@example.com and you didn't have this in her contact details, then the message thread would be listed under firstname.lastname@example.org rather than Jane Doe.