I always liked them. We had less work allocated to us on the sprint of a hack day to account for it, so that wasn't an issue (and it never should, that sounds like poor planning by a higher up). We also didn't force results. If you had nothing of value at the end of a hackday, which is pretty common, who cares - it was a hack day. Some people didn't do anything, which was completely fine. The majority of people had a personal vendetta against something in the codebase that they wanted to personally improve or add to, and that's where the results came from.

The best speed/quality ration of features came from hackdays for us because we actually cared about what we were implementing.