Nice Nathaniel, not only the endresult, but also the way you describe the process and things to improve upon.
What challenges me most, is...could we think of a way to detect what the user has drawn...and then compare that with the correct answer and give him/her clues on what should be drawn. And make the range somewhat fuzzy... so are you close... or not... :-)
One approach for that could be something like this.
https://codepen.io/lavrton/pen/OWKYMr
Invisible canvas elements, when the user clicks/draws on enough of them you know the correct area is drawn.
And this library might do the trick too.
https://observablehq.com/@mourner/pixelmatch-demo