I am trying to apply forces to particles based on an external potential (some V(x,y,z)) that is defined on a discrete grid. Is this possible to read in a potential from a file or something like that? Or read in a force (again, defined on a discrete grid)?
I know that fix addforce can apply a force based on some analytical function of space and time, but I don’t have an analytical expression, just numerical data. Is this possible, and if so, how might I do this?

There is no direct way. There is neither a built-in mechanism to read such a grid, nor the functionality to perform an interpolation and apply the resulting forces.