The selection indicator is just a drawing. You can override the drawing of the selected row with CellBackgroundPaint. I’ve done just this in my own apps. Fill a rect the size of the cell that is the color of the background of the control and return true. This will override the selection drawing.
Alternatively, you could change the selection by to -1 whenever it changes. This approach may come with unexpected behavior.
Emile, you can still use the classic API (Listbox.ListIndex) in 2019r3 it only does not show in auto complete.
For mouse UI I would just intercept mouse down in all cells in the row and flip the checkbox state for that row and return true in the event.
That way the user can click anywhere in the row and change the checkbox state, but no row can be selected my mouse
For keyboard navigation I would use Tim’s suggestion to paint the background AND text so as not to the selection. Also in the key down event check for space (spacebar) and if pressed toggle the checkbox state and return true