As you can see from the CCNP ENARSI course, Rene has exhaustively covered the use of various routing protocols within the range of DMVPN topologies, so having gone over those, you should have a well-rounded view of the advantages and disadvantages of each.
Now the choice of routing protocol you will use really depends on your specific network requirements and design. Generally speaking, you are correct, OSPF is typically avoided when it comes to DMVPN due to its strict design hierarchy as you put it.
Both EIGRP and BGP are good choices for a DMVPN environment and both are often used.
EIGRP has advantages like faster convergence and simplicity in configuration, but it’s a Cisco proprietary protocol and might not be the best choice if you’re considering a multi-vendor environment. It also works well in small to medium-sized networks.
BGP, on the other hand, is more complex to configure and has slower convergence, but it’s highly scalable and works well in larger networks. It’s also vendor-neutral and offers more granular control over routing updates.
If you choose BGP, using iBGP with dynamic peers is indeed a good option for DMVPN. This setup allows for more flexibility and scalability, as it can accommodate a large number of spokes without needing to manually configure each peer relationship.
If your network is small to medium-sized and primarily Cisco, EIGRP might be the best choice. If it’s a larger, multi-vendor network, or if you need more control over your routing updates, BGP would likely be the better option.
That’s not to say that OSPF should never be used. Many organizations have used it successfully, however, with the appropriate care, planning, and design needed to ensure correct operations.
So there’s no clear-cut answer to what’s best, as it primarily depends upon the nature of the network itself and the requirements of the topology.
I hope this has been helpful!