This is so tough. I think an important mindset to have here is to really understand where she is coming from if you want to truly move past this. I have slept with someone I really cared about (didn't realize I would end up doing so or that we would date). I had to tell him later. I have never drafted so many practice speeches. Working through how to do it with my therapist and friends. But no matter what they tell me there is no way to describe how it can make you feel unless you have been through it.
Sometimes, disclosing can pull you out of a seeming fairy tale. When I'm just me, I get to be me. Sexy and confident, fun and light hearted. Just myself. Or the someone I want to be. And often times that person is not enough once the disclosure of Herpes comes along. It cancels everything else about myself out. And not just with the guys I date, but with just me in my mind. I'm no longer sexy, I'm contagious, I'm no longer fun, because I have to answer medically inclined questions, and educate you, hold your hand, I'm bogged down with catering to your needs. I'm no longer light hearted, I'm in my head. I'm no longer confident because I'm constantly worried about what you are thinking, if its in your head when you are touching me. Even if you say its fine, I always assume its in the back of your mind, because its in the back of mine. And often, even if its "fine," eventually, its not.
When I don't disclose. Which has ever only happened twice for me. I get to have fun, and be myself. Without the pain and worry. Not saying it out loud allows me to let it not be real for myself, as well as you and that's what is so important to understand.
She probably (as you describe her incredible self) wants to be herself. And once the reasonable deadline passed, there was no "appropriate time" and in exchange she was able to be herself with you for two years, although I imagine it was eating her alive inside. Because she still isn't sharing a part of herself with you. A form of trauma and a defining moment in her life has been skipped in the timeline you know of her. That must have been difficult to suppress being able to express and share with you. Just try to understand, most of the time, its more about taking care of ourselves than it is about taking care of you. Which isn't fair. But, if she has had any experiences like I have had, no one ever takes care of us, because we are too busy taking care of everyone else. And in that state you never get to just... breathe. So she took care of herself because someone had to.
She does not deserve a full pass. A responsibility is on us despite how unfair, and we need to follow through. You have every right to be upset, devastated even. But just know that we are human, and make mistakes, and have shame, and want to get to be ourselves and have that be enough.