I think that for now I'll just stick to re-execute queries upon receiving certain events. It will greatly reduce the client-side logic and as there are not that many users I'm not concerned about the performance hit that much.
For people doing event-sourcing and have projections for every views, they could just use the latest processed event number as a version for their projection and return that number as query metadata to the client. It would make it easy for the client to know wheter the event affected the query or not.
In my case I do not have projections and I'm querying the current state so I guess that a timestamp is the most pragmatic version I could get for aggregated data. I could always compute a version number dynamically at the same time I'm processing the query, but that would probably add a lot of overhead.