I don't think I ever enforce the fine print unless someone is blatantly being disrespectful or they show a pattern of wasting our time (like a customer who always forgets to unlock the gate so we can service their property). It's easier for me to justify since our service is a lower ticket item than yours.
For your situation, did you require a deposit up front to get the materials ordered before going onsite? Maybe in those situations the deposit could be "nonrefundable" or its added as a credit for a future project so you still keep some of the money instead of losing that money because you couldn't complete the project.