Anything wrong with my typical module pattern?
I would suggest using a constructor and prototypes (as well as the module pattern) if you want to learn OOP in JavaScript. This is typically how libraries like jQuery and Zepto are built:

var App = (function($) {

  'use strict';

  // Gallery

  var Gallery = (function() {

    // Constructor
    function Gallery(images, container) {
      this.images = images;
      this.$container = $(container);

      // Create elements we need first,
      // and cache them in variables to use them
      // in prototype methods
      this.$nav = $('&lt;nav&gt;&lt;/nav&gt;');
      this.$next = $('&lt;div class="next"&gt;Next&lt;/div&gt;');
      this.$prev = $('&lt;div class="prev"&gt;Prev&lt;/div&gt;');

      // Initialization
      this._init();
      this._events();
    }

    // Methods that start with underscore are
    // meant for internal use, even though they are still public
    // it is a well known convention
    Gallery.prototype._init = function() {
      this.addImages(this.images);
      this.$nav.append(this.$next, this.$prev);
      this.$container.append(this.$nav);
    };

    Gallery.prototype._events = function() {
      this.$prev.click(function() {
        //...
      });
      this.$next.click(function() {
        //...
      });
    };

    // Public method
    Gallery.prototype.addImages = function(imgs) {
      // Append all images at once for best performance
      this.$container.append(imgs.map(render).join(''));
    };

    // Helpers

    // This function is available in the code above
    // because function declarations get hoisted to the top
    // of the scope, as opposed to function expressions, ie:
    // "var render = function(){}"
    function render(path) {
      return '&lt;img src="' + path + '" /&gt;';
    }

    // Return a wrapper that will let us call "Gallery"
    // without using the "new" keyword
    return function(x, y) {
      return new Gallery(x, y);
    };
  }());

  // App

  function init() {
    // app init
  }

  return {
    Gallery: Gallery,
    init: init,
  };

})(Zepto);

(function($) {

  App.init();

  var imgs = ['image1.jpg', 'image2.jpg', 'image3.jpg'];

  // short for document.ready(fn)
  $(function() {
    // We get back an instance of "Gallery"
    // without using the "new" keyword
    var gallery = App.Gallery(imgs, '#gallery'); // you can pass a selector

    // Add more images using public method
    gallery.addImages(['a.jpg', 'b.png']);
  });

})(Zepto);


Once you feel more comfortable with prototypes and inheritance in JavaScript, I would probably consider making a jQuery/Zepto plugin for your gallery, so you'd be able to call it on your elements like $('#gallery').myGalleryPlugin(images).