Perhaps we can support simple function application in the following manner.
(defne substo [e new a out]
(['(var ~a) _ _ new])
(['(var ~y) _ _ '(var ~y)] (nom/hash a y))
(['(app ~rator ~rand) _ _ '(app ~rator-res ~rand-res)]
(substo rator new a rator-res)
(substo rand new a rand-res))
(['(lam ~(nom/tie c body)) _ _ '(lam ~(nom/tie c body-res))]
(nom/hash c a) (nom/hash c new)
(substo body new a body-res)))
If we have a seq in an unquote then we know we have an application. All function symbols are left alone, all arguments are considered to be fresh vars or locals.