Isso funciona,
h1::before{content:'# '}
h2::before{content:'## '}
<h1>Level-1 heading</h1>
<h2>Level-2 heading</h2>
mas tenho a sensação de que seria mais correto usar ::marker
aqui e, por algum motivo, não funciona para mim. Por que é que?
h1,h2,h3,h4,h5,h6{display:list-item}
h1::marker{content: '# '}
h2::marker{content: '## '}
<h1>Level-1 heading</h1>
<h2>Level-1 heading</h2>
Você não tem itens de lista, você tem títulos ref: "seleciona a caixa de marcador de um item de lista" aqui https://developer.mozilla.org/en-US/docs/Web/CSS/::marker
Para elucidar mais por que você precisa de um contêiner para esses itens, dei a eles um com o estilo UL padrão;