Для чего нужна функция call_user_func?
Сейчас пожалуй уже не нужна. 
Раньше была нужна, чтобы передать в функцию заранее неизвестное кличество параметров. 
Сейчас для этого используется оператор распаковки переменных
Таким образом можно вызвать заранее неизвестную функцию, название которой было вычислено ранее или передано в качестве параметра.