I guess I will attempt to answer my own question ... because I think I got an fairly nice looking solution with the first line of the fold text on the left and the line stats (number of lines & character count) aligned to the right of the window.
I skipped doing words because maybe that is less useful (but then again maybe not?)
Turns out there are some things to think about when it comes to what to count and what not to count. I decided to not count the first line which is the markdown level header and minus one to not count the final newline character. I might change my mind about these decisions in future; but good start for now.
Willing to accept someone else's solution instead if someone else comes up with a better one. Thanks!
set foldtext=MyFoldText()
function! MyFoldText()
let nucolwidth = &fdc + &number*&numberwidth
let winwd = winwidth(0) - nucolwidth
let foldlinecount = foldclosedend(v:foldstart) - foldclosed(v:foldstart) + 1
let foldcharcount = -1
let lineCounter = 1
while lineCounter < foldlinecount
" Increment the count for characters in the range along with newline character
let foldcharcount += strchars(getline(v:foldstart + lineCounter)) + 1
let lineCounter += 1
endwhile
let prefix = " [ Lines: ".foldlinecount." | Chars: ".foldcharcount." ] "
let line = strpart(getline(v:foldstart), 0 , winwd - len(prefix))
let fillcharcount = winwd - len(line) - len(prefix)
return line . repeat(" ",fillcharcount) . prefix
endfunction
:help wordcount()
, but it's for a buffer.