На все три пункта один ответ - транзитивные зависимости.
Вот есть у вас в зависимостях express, а в коде вы ещё и ajs импортируете, например (ajs - это зависимость express, не ваша). В случае с npm или yarn, вы сможете использовать эту зависимость и никакой ошибки не будет. Ошибка у вас будет, когда express решит убрать ajs у себя или обновить версию и т.д. А так как ваш код работает с ajs, который не вы контроллируете, а express, то у вас на ровном месте без изменения кода будут начинать вылезать бока и начинаются ночные дебаги. pnpm решает эту проблему так, как это решал когда-то ещё нормальный (царствие ему небесное) npm до третьей версии.
Потом навалилась толпа недоинженеров, которые начали клепать кучу пакетов исходя из flawed assumption, который npm навязал всем "абсолютно все зависимости доступны всегда, даже если вы их не просили"
В общем, история это всё хорошо, но решение проблемы с транзитивными зависимостями простое - сделайте их прямыми, если вам нужен сильно этот модуль. Укажите их в package.json своем.
про транзитивные зависимости я в курсе. у меня в другом проблема с рашем