У вас декоратор не возвращает значение декорируемой функции.
В первом случае это приводит к тому, что при рекурсивном вызове fac() в строке return num * fac(num - 1)
выполняется умножение на undefined.
Во втором случае вы рекурсивно вызываете незадекорированную функцию fac(), поскольку декорируете fuc().