Жестко прекратить принимать запросы на новый функционал.
Сказать, что в процессе поддержки можно будет добавлять функционал, но уже за отдельную плату.
Собственно грамотно завершить нужно именно так, чтобы клиент не сидел на шее, а понял, что изначально разговор шел о конкретном объеме работ, который уже давно превышен, а за работу надо платить.
Тем более, что изначальное ТЗ, еще и разбитое по этапам, у вас есть - от него и отталкивайтесь.