You just pass it as value of the call. I suspect the reason it doesn't
work is in your code, not in the facility (note that the link above is
useless since the construction is mystery - if you were constructing it
right, it would work ;)).
Small example:
SEXP myEval(SEXP FN, SEXP first_arg) {
return eval(LCONS(FN, CONS(first_arg, R_NilValue)), R_GlobalEnv);
}
... or reading R-ext:
"There are a series of small macros/functions to help construct
pairlists and language objects (whose internal structures just differ by
SEXPTYPE. Function CONS(u, v) is the basic building block: is constructs
a pairlist from u followed by v (which is a pairlist or R_NilValue).
LCONS is a variant that constructs a language object. Functions list1 to
list4 construct a pairlist from one to four items, andlang1 to lang4 do
the same for a language object (a function to call plus zero to three
arguments). Function elt and lastElt find the ith element and the last
element of a pairlist, and nthcdr returns a pointer to the nth position
in the pairlist (whose CAR is the nth item)."