One way to get the advantages of the Clojure ecosystem on this project would be to represent your story as a map:
{:title "Allice's adventures in Clojure Land"
:characters []}
then when it changes write it to a file, database, Amazon-s3-bucket, Dropbox, etc. basically anything that will remember bits will do becasue Clojure structures are both printable and readable so serialization and parsing are built in.
then adding a character would look something like:
(update-in story [:characters] conj {:name "Allice"})
{:title "Allice's adventures in Clojure Land", :characters [{:name "Allice"}]}
then write that string to your data store for later retrieval. The idea behind this is to seperate the data from the storage, and update processes so each can be made as simple as possible.
the easiest (as in most familiar) way to save clojure's core data structures is:
core> (spit "save.edn" (pr-str {:title "Allice's adventures in Clojure Land",
:characters [{:name "Allice"}]}))
nil
core> (read-string (slurp "save.edn"))
{:title "Allice's adventures in Clojure Land", :characters [{:name "Allice"}]}
Though this will only work in the most simple programs. In many cases you will need something more sophisticated, like a database or object store (S3). Clojure's data format is called Extensible Data Notation or EDN, hence the extension .edn