I think Zenoss Enterprise has an additional package called "Service Impact" which has a lot of features for correlating the different devices and components that come together to form an end service to the user. I'm pretty sure its mainly for viewing the whole chain of dependencies and root cause analysis but presumably you'd be able to get reporting on this as well.
Personally I'd try to create some special monitor that effectively acts like an end user attempting to simply use the service. I recall there is some special monitoring available with the enterprise product that can take a recorded session from firefox and run it. So if you had a web service you simply get into firefox and try to run through all the primary functions of your site, recording the session for the system to play back. Or you build some special script that makes various calls to either a website or another service and returns any issues. Its all about trying to nut your servicing monitoring down to the occurance or absence of one monitor. If that monitor is succeeding, you know you're good. If its failing your customers are affected.
Even outside of that there can be things that are considered downtime that you might not be able to monitor or anticipate. Something like the site not updating with latest specials, etc overnight. From the service point of view its not working but the customers can't get the deals that they were expecting from a catalogue or such. The only solution I have for this is to allow manual entries of downtime as they're determined to exist by using backdated Maintenance windows against the device/monitor. So you have users create a maintenance window to a certain standard such as "AO_<incident#>" for Added Outage and even an override for when the outage detected by the monitor was false "FO_<incident#>" for False Outage.
Your report effectively needs to just look for events from that one monitor within a data-range, take the difference between the first and last time, ignoring any which co-incide with an associated "FO_" maintenance window then add in any "AO_" windows.
Of course if this isn't feasable for some reason then you're likely talking about grouping the appropriate systems into a "Group" organizer and doing some really tricky and complex filtering at the reports end or trying to do a lot of work at the events level to possibly make sure that any, and only, events which indicate an outage are at a level of "critical" and filter that way. But even then you could get one-off events such as those from the event logs which don't repeat until the problem subsides.
Its a tricky and complex thing to configure, particularly with a complex system that has many interdependencies across multiple systems that might also provide components for other services you also or don't care about... Thats likely why they charge for it