Learnt today that elisp's apply works with keyword arguments, so (apply 'some-func '(:foo 1 :bar 2)) works as expected. Handy.