The relevant function is
According to its documentation:
symbol-value is a function defined in C source code.
Return SYMBOL's value. Error if that is void.
Note that if lexical-binding is in effect, this returns the
global value outside of any lexical scope.
This is an example of using it on a list of variables.
(mapcar #'symbol-value '(emacs-version emacs-build-time evil-undo-system))
;;=> ("27.1 nil nil)
I copied your desired ouput and wrote a function which returns a string. Not that we need to use unique symbols so we avoid the possibility of running into scope problems (when a variable you want to print has the same name as the parameter of the lambda).
(defun my/tabular-values (variable-list)
(let ((var (gensym "var")))
(mapc `(lambda (,var)
(thread-last (symbol-value ,var)
(format "%S %S\n" ,var)
(let ((var1 nil)
(my/tabular-values '(var1 var2 var3)))
;; The following is inserted into buffer after using `eval-print-last-sexp`.