It all depends...
luatex is a two-language system and a lualatex package can use either language.
You could write a package written just as a classic latex package but using some of the extended tex commands available in luatex, such as \umathchar
etc.
You could write code that is almost all Lua, with just a very thin TeX wrapper mypackage.sty
that just does \directlua{require("mypackage")}
(luaotfload
comes to mind)
There isn't really a lot in common between these kinds of packages other than that the end user doesn't necessarily need to know anything about the implementation language, and can just do
\usepackage{mypackage}
In one case, The coding practices are just as in classic TeX, in the other case, the coding practices are those of Lua (mostly).
.sty
and a direct.lua
package..lua
code packages are included within an importing.sty
file, most times having the same basename, i.e.foo.sty
importsfoo.lua
, but I am not an expert in luatex, others should provide more profound answers