The map part only really came up when I wanted to add the attributes to the
options, I'm sure there are some other ways to do it, for example having an
option at construction time to set a base set of options from a map would
work wonderfully. The static constructors threw me. The
Asciidoctor.Factory.create works. AsciidoctorFactory may be a better class
name though. The options and the attributes one was certainly not
intuitive, I would have figured just adding the settings without the
initial call to options / attributes would make more sense.

For them implementing Map you could do a create() which either returns a
map, or the actual object which implements map, you're call.