Считаю списки более удобным решением. Как минимум для отладки.
Невключение модуля - просто коммент строки, а не застирывание
массива, правка каких-то конфигов... Можно наоборот - получение следующего указателя на функцию (задачу) выделить в отдельную функцию/макрос.
Аналогично системная функция добавления в список может просто ничего не делать, если используется массив. В варианте со списком задача может быть, например, суицидной и/или, например, добавляться в список в обработчике прерываний (но без проверок на дидлок это чревато, а с может выполняться дольше, чем хотелось бы).
Для нумерации задач и определения размера константного массива можно использовать enum с элементами, которые именованные константы (номера) для задач, а последнее поле - есть всегда и оно длина массива. Но это опять замес пользовательского кода и системного. Хотя и это решаемо.
Задачу дергать из прерываний в кооперативке? Не совсем представляю как это сделать.
Если не делать шедулер с элементами event-driven и/или time-triggered архитектур, то этот перебор функций в массиве ничем особо от биглупа не отличается.