Yes, in Emacs Lisp, as in Common Lisp and most other Lisps, arguments are evaluated before evaluating the body of the function.
This is called "applicative" order evaluation. The opposite (passing the args unevaluated to the body, which evaluates them only as needed) is called "normal" order evaluation. (Well, there are actually multiple ...
I assume your starting point is
(defun glue (arg)
(format "%s%s" arg))
(setq str1 "Hello, ")
(setq str2 "World!")
(setq hw (list str2 str1))
(insert (glue hw))
You'll have to change glue. You need to pass two arguments to format after the format string, and (format "%s%s" arg) only passes one, no matter what arg is.