I'm in the process of adding type data display to my flycheck checker, and I'm in approximately the same position as you. I believe the following to be true:
1. The emacs typed-clojure-mode doesn't display inferred types; it just checks for errors.
2. The vim plugin, which Ambrose wrote, indeed uses :file-mapping, producing a whole bunch of type strings and associated line/column position, which is then cached in vim memory for subsequent lookup.
3. What I remember from seeing the vim plugin in a talk is that the type was displayed in a line at the very bottom of the screen, analogous to the emacs minibuffer.
4. Turning on :file-mapping causes check-ns-info to take 5-10x longer to run, which is probably unacceptable for users hoping to be alerted of their mistakes, but...
5. You can run have multiple check-ns-info operations running simultaneously. The only part of the operation that actually consumes CPU is the file-mapping, so you could just have checks with and without running at different duty cycles. That's what I'm planning on doing, which, um, decomplects things a tad, as the type display won't rely on a side-effect of the error highlighting.
Re display: I'm initially planning on showing the type, exactly as reported in the string from the :file-mapping, in the minibuffer at the bottom of the screen, when keystroke is issued with the cursor over a symbol. For ccw, it would seem more natural to do the standard eclipse thing and show a borderless, wheat-colored popup below and to the right of the symbol after a period of hovering. I'll have that as an option, as I currently do for type errors (per the picture in
the Squiggly Clojure README).
Re annotation snippets: Personally, I don't see the point if you've got reasonable sexp handling already.