When want to know what an error number means I always search for "Lazarus runtime error", and this leads me to
https://www.freepascal.org/docs-html/user/userap4.html at the top of the list. When you scroll down and find error 211, there is:
211 Call to abstract method
Your program tried to execute an abstract virtual method. Abstract methods should be overridden, and the overriding method should be called.
An abstract method is a method introduced by an ancestor in the class hierarchy which only provides its name but has no implementation; its declaration is marked as "abstract". There must always be a derived class which implements the method. An attempt to create an instance of the ancestor class (which introduced the abstract method first) raises the 211 error. You only can call the overridden method of the derived class.
The only abstract method which comes to my mind in relation to your code is the TThread.Execute, but this is overridden by your TDirWatchThread.Execute. Unfortunately some external units are called there which I do not have. I commented the inner part of the Execute method and could compile a demo which simply creates a TDirWatcher. Like you I am getting a runtime error, but now it is 217 ("unhandled exception"). Debugging deeper shows that TDirWatcher.Create calls AllocateHWnd, but CTRL-clicking onto this identifier shows that this does not seem to be implemented by FPC:
function AllocateHWnd(Method: TWndMethod): HWND; // in classes.pp
begin
{ dummy }
runerror(217);
Result:=0;
end;
Therefore, I guess that it is not possible to convert the TDirWatcher to Lazarus without changes in its inner structure. Of course, this requires deep knowledge of what the component is doing and how it is working.
Maybe there is a ready-made component for Lazarus which has a similar functionality and which you can use for the TDirWatcher instead.