Drawing outside the OnPaint event is not supported by LCL on all target widgetsets. It some cases it might seem to work, but in those cases you are just lucky.
Having worked on my own GUI toolkit for years, there really is no need to do painting outside the OnPaint event - no matter what type of application or widget you are trying to implement. Yes, even selection rectangles can be painted from inside the OnPaint event.