Why my query does not run with prepare

That is not how $wpdb->prepare works. You feed prepare a string with sprintf-like placeholders, and the appropriate replacement values.

Placeholders

The query parameter for prepare accepts sprintf()-like placeholders.
The %s (string), %d (integer) and %f (float) formats are supported.
(The %s and %d placeholders have been available since the function was
added to core in Version 2.3, %f has only been available since Version
3.3.) Any other % characters may cause parsing errors unless they are escaped. All % characters inside SQL string literals, including LIKE
wildcards, must be double-% escaped as %%. All of %d, %f, and %s are
to be left unquoted in the query string. Note that the %d placeholder
only accepts integers, so you can’t pass numbers that have comma
values via %d. If you need comma values, use %f as float instead.

In your case, I am guessing that to look like:

$sqll = "SELECT Sum(votes.votes) AS votessum FROM votes WHERE votes.uid = %d && votes.competition = %s";
$reel = $wpdb->get_var($wpdb->prepare($sqll,$uid,$comp));