I doubt you can extend it to "all n-dimensional arrays of foo".
What you can do, though, is (defmacro add-support-for-dimension [n] `(extend-protocol ...)) and document that users of your library should invoke this macro once for each number of dimensions that will need supporting. If that set's open-ended, they can construct and eval calls to the macro at run time, though that's a bit icky, every time a new dimension is first encountered.
If it's true that if you have a protocol extended to a class C and its subclass S, and give it an S, it will always use the S specialization rather than the C version, and more generally will use the most specific extension that applies to the run-time type of an object, then you can extend the protocol to Object and have the Object version test for an array, handle that case generically, and throw an exception otherwise.
You could also petition for clojure to be amended to add dummy types for "x-dimensional arrays", "arrays of foo", and "x-dimensional arrays of foo" generally, so one could put something in extend-protocol to extend it to all arrays of (ultimately) doubles or all three-dimensional arrays; but clojure itself changes relatively slowly, so you'd likely have to wait a year or two, if it ever did get done.