Is there a way to define the $post var outside the loop?

I think setup_postdata($post) (internal) function does that. I failed to find proper documentation for it in Codex (typical), but there are examples with it here and there like in Displaying Posts Using a Custom Select Query. This test snippet seems to work fine for example code you have in question: foreach ( $cat1 as $post … Read more

posts and cms and posts again

I would suggest making a ‘recording’ post type and leave posts for the blog section. The “blog as category” approach would work too, but it’s rather messy, I think.