Back in the days of IE6 I did something similar for long lists but without using canvas. Basically the developer had to define the item/cell height (or multiple heights if multiple item types exist in the list) so the height of the container/list and absolute position of items in that list could be calculated. Then it made sure to use the minimal amount of elements needed to fill the visible area and during scrolling elements were added/removed accordingly. So only 30 elements or so were used at a time.
That way the list could handle a lot ot items in IE6 at the cost of predefined static item heights while still sticking to the mental model of widgets. Later GWT introduced cell widgets which use HTML strings to use with innerHTML. Because of the string based nature I never really liked the API and still using the list made for IE6.
Using canvas to render the table is interesting and definitely fast but it also means styling is limited compared to CSS + HTML without reinventing the wheel for canvas. Something simple as a checkbox or button in a row matching the design system will be difficult.
Have you tried the DOM based approach I outlined above and it was too slow for your use case? But it is nice that AI can help to explore such side projects you would never start otherwise because of time.
-- J.