You can only change GUI vim cursor color in vim:
augroup tune_colors | au!
au ColorScheme * hi Cursor guibg=red guifg=white
If you use terminal vim, change cursor colors in terminal settings.
Why does it do this?
Cursor is on a character that has actual place in a buffer. After the last character there is no actual place to put cursor on. Unless you use virtual place.
And is there a way to change this behavior?
To make it have one more character after the end of line use virtualedit option:
PS, some external plugins ...