The DAO hack actually was an exploitation of the rules that everyone agreed upon in the DAO, recursively calling a function in your smart contract layer is not a bug.
This brings us to an interesting topic, bugs are common in software,
* Should you make the protocol layer so complex that it increases the probability of bugs being found, being harder to understand and potentially grind the whole system to a halt if a bug is found.
OR
* Should you break them up into layers where each layer has one responsibility (base monetary layer, a smart contract layer, a micro payments layer etc.)