If you want to stick to something as simple as what you already have, I'd suggest reversing the order of your substitutions.
s{^\s*[-?](.*)$}{<ul><li>$1</li></ul>}mg; # note the m rather than s m
+odifier
s/([^>])$/$1<br>/mg; # add <br> only where no closing tag at EOL
s{</ul>\n<ul>}{\n}sg; # cleanup