You wouldn't need to call delete if you would do:
auto engine = std::make_unique<APIEngine>();
I haven't got to smart pointers yet but still I would need the engine pointer for later referencing until the program closes.
That's what std::unique_ptr::get() is for: to get the pointer to the object managed by the unique_ptr without releasing ownership of the pointer.
This tutorial about C++11 smart pointers is worth a read.