I understand where your pain is coming from, but I think the cure is worse than the disease. Your currying approach introduces "argument noise" that is prevalent amongst dependency injection techniques. Namely, a change in the dependencies of one low-level method percolates all the way to the very top of your application. So in your example, every bit of shared configuration bubbles to the very top of your application like so:
(defn create-bid [db]
(fn [request]
(transact db tx-data)
(defn build-routes [db]
(defroutes routes
(POST "/bids" [] (actions/create-bid db))