Кривую обработку исключил, сварганил проект на нуклео из примера
веб-сервера: добавил в пример свои гуи и получил ровно ту же
задержку 0,5 сек. Кстати ИИ утверждает, что вызов tcp_sent привязан к таймеру. Видимо эта привязка не в приведенном Вами коде, а в tcpip_thread(void *arg), где делается
/* wait for a message, timeouts are processed while waiting */
TCPIP_MBOX_FETCH(&tcpip_mbox, (void **)&msg);
И еще наблюдение: если комп что-то шлет в мою железяку, то задержек нет. Т.е. похоже что прием данных заставляет LWIP не ждать таймеров, а работать