This is all dependent on a lot of factors of how your code works, but yes, this should be doable...
The first obstacle you need to consider is timing... what order do these calls come in? Is it consistent? If the developers have control over when the events push, and the order they are pushed in, then this will make your life a lot easier....
If you can have the impression data trigger first, then the page view... when you trigger code for the impression, don't send the beacon.. merely set the dimensions / events that are associated to the impressions (don't clear your vars in this call).
Then when the page view event fires after, set all the page view dimensions and events... now.. events might be tricky.. you may need to do a custom solution where you take the existing s.events object from the impressions (if they exist), and combine it with your page view events using custom code (if you use Adobe's events in the set Variables rule it might override the previously set value - you will need to confirm this)
If you have to do custom code:
s.events = s.events ? s.events + ",eventx,eventy" : "eventx,eventy";
Essentially, check if s.events already has a value, if it does, add eventx and eventy to the existing s.events value... if nothing in s.events, just set the value to eventx and eventy
Then, when you send the beacon in this rule.. everything that was set in the first "impression" rule, and what was set in the "page view" rule, should send in the page view rule together.... and now you are free to clear vars.
Obviously this is a simplification, but in essence this would be the basic steps....
You can set dimensions and metrics across multiple rules, and just have them sit there until you are ready to send them all at once...