In a 34 minute game, 19 ward score really isn't that high.
Not saying it's not good (because you did do **really **well that game) I'm just saying that it's not enough. Adding some CS in also helps a lot, even though supports never CS while their ADC is in lane you should ideally be last hitting when they're not there. If your ADC backs or dies and you have to hold tower, drop a few Qs and autos to freeze the wave, don't let those minions go to waste. That's something all supports should be doing whether you're going for an S or just playing regularly.
With that said, what am I missing? Has Riot ever come out and given us the rubric by which they grade us?
Champion mastery ranks are scored by your performance in comparison to other players on that champion in that role. AFAIK there is no set rubric or guideline to follow for S ranks.
So if you're playing Soraka support, you're being compared to other Soraka supports. Naturally, Soraka players don't get many kills but you should have high kill participation (which you do have, but more always helps), a lot of vision score (AKA more than 19, be as liberal as possible with your wards/sweeper), and a bit of CS. Not a lot, mind you, but in a 34 minute game you should have last hit about 25-40+ish minions.
Overall, I do think you were really close. If it helps, play with a premade/duo and ask them if you can last hit some kills. Excelling in areas where other Soraka's don't (AKA kills and CS) is a great way to net an easy S.
Edit: Something I also didn't mention: I don't think kill participation as a percentage is what matters, it's the actual number of kills/deaths/assists you have. Your team only made 18 kills in total which again isn't a lot for a 34-35 minute game. I could be wrong on this front but it's most likely based on the actual numbers and not percentages.