Yeah, nobody even alluded to "roll your own engine" here. What was said / implied is don't only use the stock components. A good Unreal game has a ton of custom C++ behind it, those people aren't just wiring up prefabs from the noobie toolbox they give you.
That's the problem I alluded to. A lot of people just wire up the built-in components, because it's faster, then they wonder why their game is doing weird shit and they can't customize things to look and act like they want later.
The thing is: use Unity as a graphics engine, but don't literally build everything inside the game out of unity's GameObjects in the inspector. If you do that, you end up with a huge unwieldy monolith, a huge nested tree of GameObjects of various types, that's extremely hard to modify, and basically impossible to debug if things don't do what you want.
EDIT: For a more concrete example, consider something like building DF in Unity. If you make every creature a Unity "GameObject" with attached scripts, sprites, and animation frames, then each and every creature is running an update loop every frame. Even if they're not doing anything, even if they're not on the screen. instead, you could just model all the creatures as values in an array, and you only render what's necessary when needed. You lose the entire bulky overhead of inheriting from Unity's do-everything "GameObject" class for hundreds of your game-creatures.