#define fn(L, a, b) \
luaL_loadstring(L, "local " a "=...;return " b) && lua_error(L)

fn(L, "val,key", "{ [key]=val }");
lua_pushnumber(L, data[0]); // val
lua_pushnumber(L, 1); // key
lua_call(L, 2, 1);

Cの速度ではなくライブラリの利用が目的であればloadstringでいい