Earlier quoted context omitted.
You could maybe switch to a block cursor when you’re in visual mode with let &t_SI = "\e[6 q" and let &t_EI = "\e[2 q" in some auto commands to sort of address this
Indeed, I use block cursor in visual and normal mode, I beam in insert mode and underscore in replace mode.
What you don't have is semantics in visual selection that match an I-beam cursor; it's just games with cursor shape.