Markdown _does not_ support SGML. Look at the source for any CommonMark parser—there's a whitelist for the HTML tags.
Compare to rst and Sphinx. It's very obvious how you're supposed to add new inline and block elements. There is a standard syntax for adding parameters to directives. Markdown has nothing, so there are a dozen incompatible variations that are only available in some parsers.
On the other hand, reStructuredText also defines a whole system for transforming the document tree, which as far as I know, no other markup language does.
I guess we're not agreeing what a "markup language" is then, since the things you mention, plus defining your formal vocabulary etc., is very much the entire point of SGML/XML/HTML. I'm aware the term "markup" is used inflationary to mean all things text to all people ever since YAML came up with its original, flawed meaning of that acronym, but "markup" in the original sense really is just any layout instruction and proofreading comment written in a shorthand notation on a preprint copy, and has a very specific meaning developed from there in digital text, quite different from "any convention to encode text formatting using ASCII" (I know since my boss, a typesetter by profession, way back used that notation for reviewing/dissing my prints, and ruining my weekend ;)
Markdown indeed is only a set of Wiki syntax conventions for HTML specifically, and as such only allows HTML rather than arbitrary inline/block elements. But it's quite natural to implement Markdown (or rST) as a SHORTREF syntax within the greater SGML framework to give you site building, validation, transformations, text macros, etc. etc.