Что надо сделать чтобы функция работала на каждый select отдельно?
Ну как-то так.Что надо сделать
Прочитать про ключевое слово this и научиться с ним работать.
В вашем коде при каком-либо действии затрагиваются все элементы сразу, к примеру, вы пишите:option.each(function(i, item){
   list.append('<li>' + $(item).text() + '</li>');
});
И этот код добавит всем элементам .list все элементы option, какие только есть на странице. А на самом деле, у каждого .select свой лист и опции и работать с ними нужно отдельно.
Еще интересные строки://Установит всем .selected на странице значение первого select'a
selected.text(select.val());

//Если первый .selected на странице имеет класс focus, скрыть все существующие списки 
container.click(function(){
		if(selected.hasClass('focus')){
			list.slideUp(300, function(){
				selected.removeClass('focus');
			});
			return;
		};

		list.slideDown(300);
		selected.addClass('focus');
	});
UPD: А скрывать списки по нажатию куда-то вне них можно так$(document).click(function(e) {
        $(e.target).closest(".select").length||
              $(".focus").removeClass("focus")
                    .next(".list").slideUp(300);
});
для начала так
jsfiddle.net/ubrgzxke/5