I agree about using Unity for the big complicated projects, simply because Unity is a popular and familiar tool chain where everything works. Reinventing the wheel rarely makes sense unless you have specific requirements that Unity either doesn't support or doesn't implement appropriately.
Some aspects of game development need specifically to be programmed even if using Unity, like the core game logic for instance.
Writing games from scratch teaches you a lot regarding the gotchas encountered in:
1. Game engine architecture.
3. Large-scale code maintenance.
These are skills that you cannot pick up using Unity solely in my experience.