My approach was simpler, provide some composability.
;compiled at run time
(re/or #"a" (re-pattern "b"))
=> #"(a|b)a"
;compiled at macro time
(re/or #"a" (re/and #"b"))
=> #"(a|(b))"
https://github.com/coltnz/re-ext