Ну тут по сути надо понять зачем.
Какие у нас есть вещи на которые структура проекта влияет:
- некий discoverobility - где мол найти вещи которые тебя интересуют в рамках задачи. Тут можно ещё разбить на разные варианты зачем ты ищешь штуки. Чаще всего это "реюз" но реюз тоже разный бывает:
- поменять как работают существующие вещи это тоже реюз. Тебе надо быстро находить что менять.
- интегрироваться с готовым функционалом
В случае lodash ты как пользователь оной заинтересован только в последнем. И для этого ты не папочки смотришь а документацию. То есть структура проекта на этот момент мало влияния оказывает
Есть ещё "а куда ложить новое", есть "а как трекать/форсить зависимости", "а кто за что отвечает" (code ownership). Вот для этих вопросов утилсы и кор с шаредами не выгодно. Но если проект маленький и в целом "команда полностью владеет кодом на равных" то мы можем упрощать структуру оптимизируя вопрос "куда класть". Потому так часто можно увидеть структуру проекта организованную по technical conserns. Думать меньше с таким приходится, любой новый разработчик быстро поймет чё куда класть. На больших проектах другие вопросы будут в приоритете. И "для реюза" так же будут доки и всякие там сторибуки с документацией, всякие дизайн системы гайдлайны
При этом на добьших проектах дешевле дублировать код (правило трёх) чем потом сражаться с херовыми абстракциями и каплингом