You absolutely can. Heap allocation for every component is already unneccesary, but loose pointers on top of that is a huge red flag.
This seems like someone who isn't up to date with the most elegant and fastest ways to write C++. Charging money on top of that is egregious, not to mention that there are lots of great GUI libraries already. FLTK, Juce, Qt to name a few.
Heap allocation is necessary in real-world scenarios because it allows a tree of potentially derived widget types to be manipulated easily.
This is precisely how any robust GUI library is implemented.
This seems like someone who isn't up to date with the most elegant and fastest ways to write C++. Charging money on top of that is egregious, not to mention that there are lots of great GUI libraries already. FLTK, Juce, Qt to name a few.