There is no reason you can't listen to events from outside the imageViewerViewport template. You just have to ensure that you are binding your event to the right element.
Meteor binds events in the template definitions and attaches them when the template is rendered. As long as you are attaching your event handler when the element actually exists, it should work fine.
Are you certain your element is rendered in the DOM at the time you are binding the event handler? Set a breakpoint and check that your element is actually in the page at the time of binding. I don't know if you can attach them from parent templates to listen to events from child templates. You might need to use something like Tracker.afterFlush.
Hope that helps,
Erik