Select all rows from a table where a value is NOT found?
So if I'm understanding the schema right, this should work with a LEFT OUTER JOIN with a subquery:

SELECT q.*, ua.UserId, ua.Answer
FROM ve_survey_questions q 
LEFT JOIN (
     SELECT u.*, a.QuestionId, a.Answer
     FROM ve_survey_useranswers u
     INNER JOIN ve_survey_answers a ON u.AnswerId = a.AnswerID
     WHERE u.UserId = @userid
     ) AS ua
ON q.Qid = ua.QuestionId 
WHERE ua.QuestionId IS NULL
ORDER BY q.Qid


So the subquery returns a row for each answered question for the given user (along with the answer they selected), then we use an outer join to see what questions are still unanswered.

You can eliminate the WHERE ua.QuestionId IS NULL if you instead want the full question list for that user, along with their answer, if there is one.