The relevant function is symbol-value
.
According to its documentation:
symbol-value is a function defined in C source code.
Signature
(symbol-value SYMBOL)
Documentation
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)
EDIT:
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)
(insert)))
variable-list)))
(let ((var1 nil)
(var2 t)
(var3 nil))
(my/tabular-values '(var1 var2 var3)))
;; The following is inserted into buffer after using `eval-print-last-sexp`.
var1 nil
var2 t
var3 nil