Understanding wp_enqueue_style

Scripts and styles get output with wp_head and wp_footer functions. If you enqueue a style after wp_head, it will be output in wp_footer, which, while in practice will often work, means the theme’s html will not validate. It’s up to you (or whomever is building a theme/plugin) to enqueue styles early enough to be output in the head. All the data you’d need to determine if a style needs to be enqueued within the template is available before the template renders, so there’s no reason why you can’t enqueue everything before wp_head.