Самое главное. Для построения чего-то наподобии libevent нужен какой-то аналог select или WaitForMultipleEvents: т.е. механизм ожидания множества событий. Иначе вся твоя супер-ос разваливается на несколько десятков биглупов, и каждый в своём цикле что-то проверяет и делает yield(). Ну или хотя бы event flags (как в ITRON). Идеально было бы иметь механизм подписки на события и callback'и вызываемые по факту их возникновения. А блокирующие функции, чего-то ожидающие, в такой системе не нужны, равно как и "потоки" или "задачи". По крайней мере в сравнении с кооперативной ОС. Для многопоточной тут слоножности возникают в виде блокировок на мьютексах. Как вариант -- пул потоков для обслуживания пула событий.