...
Note that a hatch without an associative border does not have an area!
That is not true. Only hatches that are incorrect (like crossing vertices or a vertex with a length of zero) don't have an area property. Non-associative blocks that are correct do have an area property.
Here is some code wich creates a field with the area of a polyline:
(setq ar1 (entsel "\nSelect closed polyline: "))
(setq ar2 (car ar1))
(setq tab (vlax-ename->vla-object ar2))
(setq oba (vla-get-objectid tab))
(setq myarea (strcat "%<\\AcObjProp.16.2 Object(%<\\_ObjId " (rtos oba 2 0) ">%).Area \\f \"%lu2%pr0%ps[, m²]\">%"))
Myarea is a string containing a field. You can put that as text object or use in a block attribute.