Okay, let me put it another way: what handles are you closing here?  If they're inferiors of uv_fs_event_t handles, then this is the wrong approach.  If they're loop-local handles, then it _might_ be acceptable (but probably not and it doesn't look like they're loop-local anyway.)

If they're inferiors, then the right approach is to postpone closing the parent uv_fs_event_t handle until the inferiors have closed.

For the record, it is the libuv user's responsibility to close all handles before calling uv_loop_delete().  There should be no need to run close callbacks here because there should be no open handles at this point.