(function(scope) {
  
  /**
   * Utility function to check event support
   *
   * @param  {String} name of the event
   * @return {Boolean}
   */
  var supports = function(name) {
    // Cannot inspect document.body because it may not be loaded at this time
    return (typeof document['on' + name] !== 'undefined');
  };
  
  /**
   * Backup original addEventListener and determine best event type
   */
  var addEventListener = window.Element.prototype.addEventListener;
  var touchable = supports('touchstart');
  var events = {
    'click':      touchable ? 'tap'        : 'click',
    'mousedown':  touchable ? 'touchstart' : 'mousedown',
    'mouseup':    touchable ? 'touchend'   : 'mouseup',
    'mousemove':  touchable ? 'touchmove'  : 'mousemove',
    'tap':        touchable ? 'tap'        : 'click',
    'touchstart': touchable ? 'touchstart' : 'mousedown',
    'touchend':   touchable ? 'touchend'   : 'mouseup',
    'touchmove':  touchable ? 'touchmove'  : 'mousemove'
  };
  
  /**
   * @override
   * Override Element addEventListener
   *
   * Intercept the addEventListener calls in order to select best event type.
   *
   * @param type       {String} is the event name
   * @param listener   {Function} is the event handler
   * @param useCapture {Boolean} defines capture rule for event
   */
  window.Element.prototype.addEventListener = function(type, listener, useCapture) {
    type = (events[type] || type);
    if (type === 'tap') Tap.create(this, listener, useCapture);
    
    return addEventListener.call(this, type, listener, useCapture);
  };
  
  /**
   * Tap event (elementary implementation)
   */
  var Tap = (function() {    
    return {
      create: function(element, listener, useCapture) {
        element.addEventListener('touchend', listener, useCapture);
      }
    };
  })();
  
})(window);

(function(scope) {

    /**
     * Utility function to check event support
     *
     * Cannot inspect document.body because it may not be loaded yet
     *
     * @param  {String} name of the event
     * @return {Boolean}
     */
    var supports = function(name) {
        return (typeof document['on' + name] !== 'undefined');
    };

    /**
     * Do not use thumbs.js on touch-enabled devices
     */
    if (supports('touchstart')) return;

    /**
     * Backup original addEventListener
     */
    var addEventListener = window.Element.prototype.addEventListener;

    /**
     * Map touch events to mouse events
     */
    var events = {
        'touchstart': 'mousedown',
        'touchend':   'mouseup',
        'touchmove':  'mousemove'
    };

    /**
     * Override Element addEventListener
     *
     * Intercept the addEventListener calls in order to select best event type.
     *
     * @param type       {String} is the event name
     * @param listener   {Function} is the event handler
     * @param useCapture {Boolean} defines capture rule for event
    */
    window.Element.prototype.addEventListener = function(type, listener, useCapture) {
        // Wrap touch events with the equivalent mouse event
        if (events[type]) {
            var original = {
                listener: listener,
                type: type
            };

            // Mouse event callback will fake the touch event
            listener = function(e) {
                var e = createTouchEvent(original.type, e);
                original.listener.call(self, e);
            };

            // Use equivalent mouse event
            type = events[type];
        }

        return addEventListener.call(this, type, listener, useCapture);
    };

    /**
     * Utility function to create a touch event.
     *
     * @param  name  {String} of the event
     * @return event {Object}
     */
    var createTouchEvent = function(name, e) {
        var event = document.createEvent('MouseEvents');

        event.initMouseEvent(
            name,
            e.cancelBubble,
            e.cancelable,
            e.view,
            e.detail,
            e.screenX,
            e.screenY,
            e.clientX,
            e.clientY,
            e.ctrlKey,
            e.altKey,
            e.shiftKey,
            e.metaKey,
            e.button,
            e.relatedTarget
        );

        return event;
    };

})(window);

Update to use touch-first approach.