1. Чтобы ограничить область видимости, т.е. избежать глобальных переменных.
2. Чтобы сократить запись обращения к объекту.
3. Как частный случай 1го и 2го, чтоб не допустить конфликта имен. Например, при использовании jQuery часто пишут
(function($) {
...
})(jQuery);
Благодаря этому в скрипте можно использовать сокращенную запись типа $(xxx), даже если идентификатор $ определен где-то еще, например, в MooTools.
P.S. И это, кстати, не замыкание.