get_posts() actually instantiates a new
WP_Query object, so if you're comfortable using
WP_Query directly, don't even bother with
get_posts will only return the results from the database, whereas
WP_Query gives you the whole functionality of the class.
In addition to what John P Bloch says, you can modify the default WP_Query object (instead of creating an new instance) before it runs with it's class methods and an action hook, reducing the db calls you make.