We use Iterable for messaging (email, push, sms, etc) and have had really great success. They also support webhooks to send all this data to your snowplow endpoint, so it was also trivial to get all our messaging data into snowplow. That might solve half your problem?
I might not be understanding what you're looking to do, but it sounds like you also want to use data you've collected with snowplow (maybe analyzed) and use it in your messaging system? For instance to target people who visited some app and engaged event data from snowplow, send them a push message.
For us right now on Iterable, we are basically doubling event collecting. We have a separate codebase and logic to send info into Iterable, and we're doubling up by also sending it into snowplow. That's something we are interested in fixing in the future. But right now, if we sent everything we collect with snowplow to Iterable they probably wouldn't be too happy it's a ton of data.
Ideally we want to use more ML to help send better messaging, using the data we've collected with snowplow, and we're excited to see where Sauna and some other AWS tools take us.
Would love to hear if you find a better solution!