meta_query keys and sticky posts

get_posts() is a rather generic wrapper for retrieving set of posts and just that. As such it purposely unmakes some of the arguments typical for loops.

Specifically it ignore stickies:

$r['ignore_sticky_posts'] = true;

So if you want more loop-like behavior you should be using instance of WP_Query object instead.