Функции, объявленные как статические, не видны за пределами единицы перевода, в которой они определены (единица перевода - это, по сути, файл .c). Если функцию не нужно вызывать извне файла, то она должна быть статической, чтобы не загрязнять глобальное пространство имен. Это делает конфликты между одинаковыми именами менее вероятными. Экспортируемые символы обычно идентифицируются с каким-либо тегом подсистемы, что еще больше уменьшает возможности конфликта.
Часто указатели на эти функции заканчиваются структурами, поэтому они на самом деле вызываются из файла, в котором они определены, но не по имени их функции.