I'm still not 100 percent sure what you are trying to do; I don't find your intention completely clear from the code.
So far as using Lua is concerned, I think you will, on balance, be better off setting up a command that does each line, rather than trying to do something that does the whole table. That leaves you setting up the table, but using your command to format each individual line. You obviously could extend this to read in a lot of lines together, but I can't see the advantage of that unless you intended to read them in from a file.
I set it up so the syntax is TITLE=line|line|line You can fiddle with the string.find and string.match lines to change that if you prefer something different. I put in the \cline largely so that one could see where each box ended; it would be easier without really.
But my hunch is that you are just going about this the wrong way. For what I think you want, the idiomatically LaTeX-ish way to do it is, I think, a description list. So I demonstrate that as well.
\documentclass{article}
\usepackage{luacode}
\usepackage{longtable}
\usepackage{enumitem}
\begin{luacode*}
function doline(line)
local splitpoint = string.find(line, "=")
local title = line:sub(1, splitpoint-1)
local description = line:sub(splitpoint + 1)
tex.print(title)
for token in string.gmatch(description, "[^|]+") do
tex.print("&" .. token .. "\\\\")
end
tex.print("\\cline{1-2}")
end
\end{luacode*}
\newcommand{\tabularline}[1]{%
\directlua{
doline("#1")
}}
\begin{document}
\begin{longtable}{|p{3cm} | p{7cm} |}
\cline{1-2}
\tabularline{Title=Description| More Description| Third Line}
\tabularline{Title 2=And plenty| More | Where that | Came From}
\end{longtable}
% And a more latex-y solution IMO
\begin{description}[leftmargin=3.2cm, labelwidth=3cm, labelsep=0.2cm]
\item[Title 1] And here.
We have.
Some text.
\item[Title 2 Like This] And here is a longer description.
Which also has a paragraph in it.
\end{description}
\end{document}

UPDATE
In comments, the OP asked whether it was essential to use the | character, or whether the split could take place on newlines. I said it could, but the OP then found that didn't work. That's right.
The problem is not with the lua code, but with the fact that because the argument to \tabularline is "processed" by TeX before it gets passed into Lua, newlines have been replaced by spaces. The/a solution is to be found in the answer here: we need to detokenize the argument first.
That, however, ends up with the formatting function receiving a string in which the newlines are replaced by "\par". Because of the way I'm splitting, that is not such an easy solve. Perhaps the best way would be to loop over the string, using string.find to locate \par and splitting there. But it's shorter, though less tidy, simply to substitute \par for \n before doing the split. So we end up with modified code as follows:
\begin{luacode*}
function doline(line)
local splitpoint = string.find(line, "=")
local title = line:sub(1, splitpoint-1)
local description = string.gsub(line:sub(splitpoint + 1), "\\par", "\n")
tex.print(title)
for token in string.gmatch(description, "[^\n]+") do
tex.print("&" .. token .. "\\\\")
end
tex.print("\\cline{1-2}")
end
\end{luacode*}
And
\newcommand{\tabularline}[1]{%
\directlua{
doline("\luatexluaescapestring{\detokenize{#1}}")
}}
For my part, I prefer the pipe (or, still better, the description list) but that is really just a matter of taste.