Simple Grid Builder for Future Maze Applications
Docstrings go BEFORE the arglist

(defn my-function 
  "with aweseome documentation"
  [all the args]
  :insert-code-here)


Visited really shouldn't be a property of a cell.  Instead of mutating your cell, you should maintain a set of visited nodes.  Maybe you want to run two different path finding algorithms over the same data?  

Your case corners are a little strange.  Whenever you see this, you should probably think map:

(def corner-cells
  {:top-left #{:east :south}
   :top-right #{:west :south}
   :bottom-left #{:east :north}
   :bottom-right #{:west :north}})

(defn create-corner-cell 
  "Creates a corner cell which has two valid directions."
  [corner]
  (create-cell (corner-cells corner)))


Do you really need :top-left and all those combinations?  Consider instead:

(def open-block #{:north :east :south :west})
(def wall-for-side
  {:top :north
   :bottom :south
   :left :west
   :right :east})

(defn add-walls [block &amp; sides]
  (clojure.set/difference block
                          (map wall-for-side sides)))


mazer.core&gt; (add-walls open-block :top)
#{:west :south :east}
mazer.core&gt; (add-walls open-block :top :left)
#{:south :east}
mazer.core&gt; (add-walls open-block :bottom :right)
#{:west :north}


A function like corner-cell? doesn't need to return a list like that. 
 Simply return nil for false and the direction for true. You can use (if-let [dir (corner-cell? ...)] :something-with-dir :something-without-dir) to differentiate.  And, since this isn't strictly a predicate, you really shouldn't name it with a question mark.  Maybe corner-cell-type.

I wouldn't use memoization here. You almost never need to memoize. If you REALLY think you need to cache this, that's the kind of information that probably would go on the cell.  But I think you should just convert the index to an x/y (math is fast) and compare that.