Keyword arguments almost work with the current optional argument syntax, except for reordering:
(def cut (seq (o ('start start)) (o ('end end)))
...)
And you call it like this:
(cut seq (start x) (end y))
(destructuring with literal symbols - don't know if that's supported yet, but it should be.)
The only problem seems to be that you can't reorder them. What if you make the rule that you can have more than one name after the dot in an argument list, but they're unordered?