Use canvas for regular events but listen to window.onmouseup
instead for mouse up (in some cases you'd want this for mousemove as well).
When you're outside the canvas element the mouse won't trigger mouse events on the canvas element but the element below and on window (unless the event is prevented from bubbling up).
Simple example:
var isDown = false; // mouse state
canvas.addEventListener('mousedown', function(e) {
isDown = true;
...
}, false);
window.addEventListener('mouseup', function(e) {
if (!isDown) return;
if (e.preventDefault) e.preventDefault();
isDown = false;
}, false);