I don't think it is possible to directly call this funcref from within mapping -- by the time you press mapped key funcref is already disposed/freed/unavailable.
You can try to persist funcref though (either in global or script local dict):
let g:my_funcs={}
function! Foo(func_ref) abort
let g:my_funcs.f = a:func_ref
nnoremap <buffer> <cr> :call g:my_funcs.f()<CR>
endfunction
function! Callback() abort
echom "123"
endfunction
command! Test call Foo(function('Callback'))

It is not necessary to use dictionary, you can have regular global var I think. But for the dictionary you can come up with some clever things, like having array of functions, caching or whatever else.
:help Funcref
talks more about that and mentions lambdas explicitly... What I'm saying is that you might want to clarify your question with an example call of Foo (perhaps with a lambda?) to make it absolutely clear what you're trying to accomplish... As it stands, your question is likely to attract incorrect answers (such as the one withexecute
), which might not be the case if you had an example call that would make it clear that wouldn't have worked.Funcref
, but you are right, it's still confusing, I clarified it in the update.