Это все потому, что так и не удосужились сделать нормальное описание библиотеки.
Только примеры, которые выглядят странно. Потому что не ясно, что делать в случае тех или иных ошибок.

Возвращаясь к вашему примеру.

1. Состояние 0 (открытие файла) долбит запрос, пока не получит желанный ASYNC_WORKING, больше ни на что не обращая внимания. И то, после получения желаемого ответа продолжает то же самое из состояния 1. С тем же успехом это можно делать и из состояния 1.

2. Теперь состояние 2 (запись в файл). (согласен, 2 и 3 отличаются)
Если при первом запросе на запись не получено ASYNC_WORKING, надо закрывать файл? Почему? Там может быть куча разных причин/ошибок. А может, лучше подождать?
Откуда мне знать? Описания нет.
Состояние 3 вызывает те же вопросы. Плюс к тому: если не записалась требуемамя длина, то закрыть файл? А что случилось, все равно? Может, кончилось место? Такой ошибки почему-то нет. А мне позарез надо данные сохранить!

3. Состояние 4 (закрытие файла).
Если с первого запроса не получено ASYNC_WORKING, то записать строку(???) (переход в состояние 3).
Код:
	4: (*закрываем файл этап1*)
	res:=OwenFileCloseAsync(handle, ADR(result)); (*закрываем файл*)
	IF res=ASYNC_WORKING THEN (*если "работа",то переходим в состояние 5, либо в 3*)
		state:=5;
	ELSE
		state:=3;
	END_IF
Вообще непонятно. Мне надо закрыть файл, данные кончились, что там еще записывать?

А что произошло, когда при закрытии файла получено result <> 0?
Код:
	5:(*закрываем файл этап2*)
	res:=OwenFileCloseAsync(handle, ADR(result));
	IF res=ASYNC_DONE THEN (*если "завершено", то переход в состояние 0*)
		IF result=0 THEN
			state:=6;
		ELSE
			state:=4;
		END_IF
	ELSIF res<0 THEN
		state:=4;
	END_IF
Запрос на закрытие файла повторяется снова и снова. Состояния 4 и 5 делают либо одно и то же, либо переходят на вообще ненужные действия - записывать данные, которых нет.