“Code as data”, aka “code is data” signifies the ability to manipulate code, i.e. to construct and take apart programs. At the most primitive level that can be accomplished by representing source code as strings, which is possible in most programming languages. Going beyond that, many programming languages define an AST data structure, with a parser and pretty printer, that allows manipulation of code in a more structured manner, enforcing most, if not all, syntactic constraints of the language.
However, neither of these approaches fully capture what is meant by “code is data” in the Lisp tradition. There code really is data. There is no special AST data type and associated parser and pretty printer. Instead all programs are represented in terms of the ordinary data types of the language, such as symbols and lists. The concrete syntax of programs is subsumed by the standard external representation of data.
None of this has anything to do with closures.