Вы можете просто использовать псевдонимы, чтобы избежать конфликта имен:
import {
foo,
} from './some/path';
import {
foo as bar,
} from './some/other/path';
Но да, большинство библиотек имеют одну точку входа (обычно индекс. js), которая экспортирует функциональность субмодулей. и все, что вам нужно сделать, это не экспортировать модуль, который вы хотите скрыть. Теперь, конечно, кто-то может импортировать субмодуль, который вы хотите скрыть напрямую, указав путь к нему в папке node_modules, но кто-то делает это: а) по глупости полагаться на неопубликованный c API и б) возможно, играть в достаточно высокий уровень, чтобы избежать такой ошибки.
Что касается кода приложения, потребляемого напрямую, просто поместите его в библиотеку, которую вы добавляете в пакет. json, например, из git url, или просто прокомментируйте код или изменить имя. Typescript также может помочь, если функции имеют разные сигнатуры типов, невозможно будет использовать одну там, где вы имели в виду другую.
Но, в конце концов, самый простой путь - это просто немного поверить в свою коллеги-разработчики: путь, путь, слишком много усилий уходит на то, чтобы люди не допустили ошибок, которые они вряд ли допустят.
РЕДАКТИРОВАТЬ на основе комментария
Импорт может быть распределен по пространству имен следующим образом:
import * as Whatever from 'some-module';
Whatever.someFn();