If I get it right you can just add a window function outside of your query like:
SELECT interval_date, campaign_revenue
, SUM(campaign_revenue) OVER (ORDER BY interval_date)
+ (SELECT SUM(revenue)
FROM sale_event
WHERE s.campaignid = $1
AND s.created < $2
AND s.event_type = 'session_closed') as total_campaign_revenue
FROM (
SELECT interval_date
, coalesce(campaign_revenue,0) AS campaign_revenue
FROM
-- generate_series helps fill the empty gaps in the following JOIN
...
interval) results
ON (results.interval = interval_date)
);
Another option is to apply the window function directly, and use a FILTER clause for campaign_revenue