I don't know how Lazarus' LCL works internally, but in Delphi's VCL, each TWinControl-derived component registers its own WNDCLASS with the Win32 API, using its own ClassName for the registered class name. If the component wraps a Win32 API control, like SysListView32 in the case of TListView, then the API control's original OS-provided WNDPROC is used in the WNDCLASS. And then an HWND is created using the registered ClassName, and then subclassed to intercept messages for the HWND.
So, for example, this would allow a TListView object to have an HWND which shows up in Spy++ with a class name of 'TListView' instead of 'SysListView32', but it would still behave like a standard SysListView32 at runtime.