It's a case of being pragmatic ... but at the same time looking at the bigger picture.
Yes, right now you've got a really complicated piece of design to do, and you're struggling to get it to work with semantic HTML and CSS best practice. So do you give up, or do you persevere? If you've got time, and you persevere, then hopefully you'll figure out how to do it properly, and then you'll have learned something useful that will help you when you come up against a similar problem next time. Whereas if you just give up and bodge it together any old how, you'll be in the same position next time round, without a solution. So then, do you bodge it, or do you try to do it properly? If you try to do things the right way from the start, you should find you save yourself time in the long run, even if it takes a bit longer that first time.
Other times, you might know how to do it properly, but it takes up masses of code and you can't see a way to streamline it, but the bodge approach is much leaner. In that case, you have to compromise, and to do that, you have to know the pros and cons of each method. If you bodge it, what are the side-effects going to be? How badly will anyone lose out as a result? If you do it the proper way, will the extra mass of code add more problems (eg, in terms of bandwidth) than it solves. And that will depend on the situation, and will vary from one case to another.
As a general rule, I always try to do things properly – the right way is the right way for a good reason, which means that you have to have a really good reason to deliberately choose the wrong way!