Is there complex application examples out there that can be considered best practice material?
If you are used to OO (which I guess since you like separation of concerns), do not use the Arduino IDE, since it is very hard to work with multiple files. Instead use e.g. vMicro for Visual Studio.

Separation of concerns (using C++) for the Arduino is not much different than in other languages. C++ has the notion of classes, and fields/functions can be made private, protected and public (simplified).

However, C++ itself is not so easy to learn, mostly because of pointers and related issues. However, it's something to dive in when you want to learn something new.