Thanks for your quick answers!
@gmclelland the concept of hooks in the backend sounds interesting, I'll have a look into that later.
@LostKobrakai I know about this view, but I strongly disagree with it. From my perspective, there are two layers of handling invalid data. The one at input time, where UX and software ergonomics say that systems should give valuable feedback to the users in case of invalid or problematic input (and try to fix minor problems automatically, but also with feedback). And the one at computation/output time, where the system should handle all data fault tolerant. If I had to choose only one, it would be handling invalid data at output time (at least for the case, where the validation rules fail or change). But there is no restriction on that, so my best case is to handle invalid input on both sides. So Ryan's point is completely valid: Nobody wants systems, where some invalid data breaks the whole page's output. But that doesn't invalidate arguments towards input-validation, which is another issue.
And about silent fixing: A system cannot decide, what a user wanted. For the example of end date before start date: Did the user just mixed the fields up? Or is one of the dates simply mistaken? In the first case, a simple fix would be helpful, but in the second case in the end, the user did one mistake and the silent fix made it worse and now both fields store data, that the user didn't want to input. A system then has to ask the user what his/her intended input was and therefor input validation ist a must, since output fixing cannot ask questions.
I was wondering, why there is an engine using expressions to decide, if a field is required or shown at all depending on other fields values, but not if its own value is valid. It would be a great addition to make this engine available for simple validation tasks.