The result you'll get in Clojure 1.10.1 is:
user=> (s/explain ::thing {:a {:b {:c "not int"}}})
"not int" - failed: int? in: [:a :b :c] at: [:nested :a :b :c] spec: :user/c
{:a {:b {:c "not int"}}} - failed: (contains? % :x) at: [:top-level] spec: :user/top-level
The way this is implemented, it's really matching both in parallel, so it gives you all the failing paths. The explain message is sorted based on path length, so you are intentionally seeing the one that matched "deepest" first.
I don't think it's likely that there will be a "cut" type thing, but there are many possible changes in problem reporting. The particular case of fanout (particularly wide fanout, which is not this case) is one that I think is of higher priority, but we don't have any active plans to work on this in the short term.