Если функция не экспортируется и не вызывается явно, она считается неиспользованной.Таким образом, у вас есть два пути:
1) Экспортировать функции, которые используются косвенно.Если вы не хотите, чтобы эти функции вызывались извне модуля, вы можете выделить это в документации (и в комментариях.)
2) Вызовите каждую функцию явно в weird_func:
weird_func(fun1, [A1,A2]) ->
fun1(A1, A2);
weird_func(fun2, []) ->
fun2();
weird_func(fun3, [A1,A2,A3]) ->
fun3(A1,A2,A3).
Последний вариант немного более многословен, но обеспечит лучшую ошибку для пользователей, если они вызовут несуществующую функцию