Advise on Templates for Custom Queries

I don’t really see anything wrong with what you’re doing; globalizing $post and using setup_postdata() are very standard, well-established techniques for dealing with posts that don’t come straight out of the standard loop; they’re not usually considered hacks.