I’d opt for the "folder + child-documents" strategy. There are several snippets/plugins in the repository that basically use splitter-strings inside one big article and create a pagination for each document-part (article.html?page=1 etc.)
However, personally, I think it leads to problems when you want to restyle / redefine headers, subheaders etc. as you describe. Also, most editors are too fond of using their beloved WYSIWYG, and chances are they’re gonna mess up some of these special tags sooner or later.
With Ditto, you could create a template-chunk for each article-type. For headers and sub-headers you’d ideally use the standard [+pagetitle+] [+longtitle+] [+description+] fields and just wrap them in whatever HTML-tag you like. A page showing the entire article on one page, would include a Ditto call similar to this:
[!Ditto? &parents=`45` &tpl=`fullArticle` &sortBy=`menuindex` &sortDir=`ASC` &total=`99`!]
- 45 being the container here. The fullArticle chunk would just use something like:
<h2>[+pagetitle+]</h2>
[+content+]
You can use this handy snippet to create automatic prev/next navigation:
http://modxcms.com/DocLink-2245.html
If you’re going to create a PDF for the full article, you could create a template variable (TV) for the PDF-download-link and store that in the container instead.
Other helper snippets might be GetField + FirstChildRedirect.