Adding or editing JSON.
The vast majority of the data dda handles (item definitions, crafting recipes, monster definitions, map generation templates, martial arts styles, mutations) is actually defined as json files. How this works is that there is some code written in c++ that loads the json entities and turns them into data and logic that can be used by the game engine. There are only certain things you can adjust about a JSON entity, because the code that reads it has to be written in such a way that it can apply that data to an entity of that type.
Implementation-wise, there are two components to this. First we have a JSON library that was written for dda that can parse and emit JSON. Secondly there is code for each kind of entity that reads JSON entries and turns them into game logic.
Adding or editing LUA.
LUA is a programming language that is designed to be embedded in other programs. There are various parts of dda that can accept LUA as an input, usually as part of some JSON entity. In theory, any behavior can be specified by LUA, but in practice, each piece of functionality that a piece of LUA can exercise has to have supporting C++ code. As a result, there are only a few places where LUA can be injected into the code, making it difficult to work with.