Okay but what would you say if I told you it's turtles all the way down?
Also I'm pretty sure that if you wanted each turtle to just be a static size, shape, etc. you could do that by replacing Blockly.BlockSvg.render with a function that checks the type of the block and then sets the block's path/paths to a static SVG image of a turtle per block type, which would let you create/edit your turtle images in a real editor.
As long as you don't need to assemble the turtles from parts, it would be fine. You would also want to remove any blocks that your renderer can't handle.
I don't know what you'd do about numbers/inputs, but I think you could just put the connection in the middle of the block and then make the number block rendering customized to look nicer.
You would have to figure out where the connections go, as you mentioned, but that's handled in render so you could get two turtles with one stone there.
TLDR this is significantly easier than trying to change block rendering in a way that consistently handles different types of inputs, branching, etc. You could probably make a fun bugtastic version of it relatively quickly. I have no comment on how you would generalize it or remove
bugs, though.