> you typically want to provide a schema for what's in the cursor, and this doesn't support that

that's actually the purpose of this function. You want to specify what the contents are _and_ that it's a cursor.
Whole thing's a cursor:

```clojure
(defschema WidgetData
 (om-tools.schema/cursor
   {:foo {s/Keyword s/Int}}))
```

Or individual parts are cursors

```clojure
(defschema
  {:foo (om-tools.schema/cursor {s/Keyword s/Int})})
```

> I think you actually need to wrap the object and validate on derefs?

Unless I'm missing something, Om cursors are essentially are this wrapping.
From what I saw in writing tests, they schematize like normal data, but additionally can be checked with `om.core/cursor?`.
https://github.com/Prismatic/om-tools/blob/70580102d83945b9f50f9d935cc7ce8f8dc18af7/test/om_tools/schema_test.cljs#L19-L21