This happened to me, and turned out just fine. My partner waited this long, if not longer, for extremely similar reasons. It was very hard for me, because I could not really understand it no matter how well it was explained.
What I decided is that, for me, it was most important to be with someone who I enjoyed being around and cared about me more than I cared if he could say the words. Like your boyfriend, he showed his commitment and care everyday. I saw love in action before I heard it said. I wasn't sure if it would be okay forever, but I knew I loved him and our life together, and I could at least handle it for the time being.
It was the right choice for me. I realize that it's easy to look at one part of a relationship, from the outside in, as if it exists in a vacuum and tell people they deserve better. Maybe you do. All I know is, when we did reach the point of "I love you," I knew it really meant something special and I am so grateful I didn't give up. He's my favorite person and the one I want beside me on all of my ill-conceived life adventures.
Maybe this doesn't work for you. You're older than I was, maybe your timeline needs to go a bit faster. That's totally valid. Maybe you just don't want to be with someone who doesn't know after this long. That's totally valid too. If you cant handle the pain, by all means do what you need to do to protect yourself. It's okay to not be okay.
I just wanted to offer an alternative perspective. When I was going through this, I searched and searched, and I couldn't find a single optimistic story. There might be a good reason for that. Probably is, don't care. You should at least know that this issue is not 100% the end of your relationship in and of itself. That is for you to decide. I am a firm believer that you know if he loves you or not, based on his actions, but it is up for you to decide if you can or want to handle his current inability to verbalize it.