Если вы хотите запускать функцию hi6 внутри loop, то как минимум нужно добавить скобки.
С другой стороны - в таком виде, даже со скобками, hi6 сработает один раз. Чтобы она запустилась положенное количество раз ее нужно вызывать в теле loop.
Потому-что скобки являются тригером для запуска функции.
В новом коде hi6 выполняется 10 раз потому-что вы приравниваете переменную f к hi6, передавая ее через параметр, и в при каждой итерации вызываете f().
При этом, если вы пишите что-то вроде:
...
loop(f, n-1)
loop(hi6(), 10)
То hi6 выполниться всего один раз при вызове loop, поскольку скобки указаны только здесь, в то время как f в loop(f, n-1) будет равна None, т.к. hi6() уже отработала.
p.s. Почитайте про декораторы - там эта тема должна подробнее описываться.