ELISP> (read "(a b c)")
(a b c)
ELISP> (read "(9 . 3)")
(9 . 3)
If by (9 . 3) you mean you'd like a cons, then my answer would work. Note however if you actually would like a dot, my answer not so much.
Yes, use interactive with a Lisp sexp, not a literal string. You can't specify particular defaulting with a literal string arg.
You can use read-from-minibuffer, read-string, or completing-read.
Provide the value returned by (thing-at-point 'word) as the DEFAULT-VALUE argument to one of those functions, not the INITIAL-CONTENTS argument.
(You can use the ...