さっき思いついて1分で書いた。
function _(){ if(arguments.length === 0){ return null; // () => nil } var operator = arguments[0], operands = []; for(var i=1, len=arguments.length; i<len; i++){ operands.push(arguments[i]); } return operator.apply(null, operands); } function plus(a, b){ return a + b; } function multiply(a, b){ return a * b; } _(console.log, _(multiply, 3, _(plus, 1, 2))); // => 9