The problem is that you either implement Morphic, which is designed to work on the level of pixels so you have to do it with <canvas>, or you don't and can then choose any display strategy you'd like. The problem is that Squeak and Pharo rely on Morphic for display, so you need to have it implemented if you want to reuse the code of those.
It's probably possible to write Morphic-compatible rendering framework based on React, for example, which would be an interesting excercise, but I don't know if anyone attempted it.