Зачем передавать самовызываемой функции параметр undefined?
Потому что по недосмотру, undefined не зарезервированное имя (как, например null) и кто-то может написать undefined=42. 

Поэтому авторы библиотек таким образом гарантируют, что undefined точно undefined
Помимо защиты от подмены, уже описанной в других случаях, аргумент функции будет сокращен до 1 буквы при манглинге кода, что по сравнению с использованием глобального значения позволяет экономить 8 байт бандла на каждое использование undefined
Аналогично часто делают с window и document