Как же тогда использовать ООП в WinAvr?
Никак. Вы не поверите, но существуют системы, на которых парадигма ООП не дает выигрыша, но, более того, дает существенный проигрыш в параметрах эффективности кода (размер, скорость выполнения). Небольшие контроллеры вроде AVR (а также STM8, MSP430, не слишком монструозные STM32) относятся именно к таким системам. Так что, если вы пишете под AVR, ваш выбор - процедурное/структурное программирование.
Если вам очень хочется странного, можете посмотреть, как ООП реализуется на платформе Arduino. Правда, я думаю, после того, как вы увидите, насколько нещадно такой подход выжирает память контроллера (если мне не изменяет память, мигание светодиодом занимает там что-то около полутора килобайт), вам расхочется действовать таким образом.
Что касается оператора new, то, чтобы он работал, необходим механизм динамического выделения памяти, который вам придется реализовывать самостоятельно. Кроме того, качественный менеджер памяти легко может сам занять всю память какого-нибудь младшего чипа из семейства AVR.