У протокола TCP есть состояние TIME-WAIT. Об этом можно вкратце почитать
http://xn--80ae9aggj.xn--p1ai/2009/01/19/tcp-time-wait/.
Чтобы вызвать процесс закрытия соединения, т.е. отправку пакета FIN (как сказано по указанной ссылке), необходимо вызвать netconn_close() для TCP-соединения (или netconn_disconnect() для UDP-соединения) перед вызовом netconn_delete(). После вызова netconn_close() необходимо сделать небольшую задержку, чтобы полностью произошел обмен пакетами FIN -> ACK. (примерно 2-3 сек). Параметр MSL (maximum segment lifetime) задается в файле tcp_impl.h (lwip-1.4.1) TCP_MSL (по умолчанию 60 сек). Поэтому пока период TIME-WAIT не закончится, вызов netconn_bind() будет выдавать ошибку.
У меня похожая проблема. МК выступает TCP-клиентом. После первого соединения с сервером, последующие не проходят. Повторный вызов функций netconn_new() возвращает NULL. И аналогично повторный вызов pppOverSerialOpen() возвращает ошибку. При этом пробовал делал задержки до 5 мин. Как будто вызов функций pppClose(), netconn_delete() не очищают память. Может не вызывать повторно функции pppOverSerialOpen() и netconn_new() и тогда все будет ОК.