Потому что underscore можно использовать как в функциональном, так и в ооп стиле:
_.map([1, 2, 3], n => n * 2);
_([1, 2, 3]).map(n => n * 2);
Обратите внимание на второй вариант записи, для этого вызова и используется приведенная в вопросе функция причем сразу в качестве функции для вызова и конструктора для создания обертки.
root, потому что
UMD.
Раз уж принялись изучать код библиотеки, то читайте и комментарии, они весьма информативные.