I have a pretty basic question about Lattice-Boltzmann methods. I heard that this is a meshless simulation method. How do you account for obstacles and boundaries in a Lattice-Boltzmann code. Does it work like a $\Delta x$, $\Delta y$ grid ?
The Lattice Boltzmann is not a meshless method. Actually, when looking at it, it is a finite difference method on an homogenous structured Cartesian grid (dx = dy = dz).
However, the variables solved for are not the primary variables (U and P), but are pseudo-populations $f_i$ where $i\in [1,n_p]$ and where $n_p$ is the number of population in the lattices.
These populations undergo advection (streaming) and collisions (using a collision operator like the BGK operator) and "move from node to node". This allows them to reproduce the pseudo-incompressible Navier-Stokes equations.
How are boundary conditions specified? Well there are numerous ways. One of the simple way to apply no-slip Dirichlet Boundary condition is the Bounce-Back rule. This rule makes it so that the populations literally bounce back on the obstacle, leading to a 0 velocity at the position of the interface. There are numerous ways to specify the boundary conditions (extrapolation methods, immersed boundary methods, on-lattice and off-lattice boundary conditions, etc.), but you always need to specify them.
Overall, if you wish to get a very good overview of LBM, I lead you to the Wikipedia article on the matter: https://en.wikipedia.org/wiki/Lattice_Boltzmann_methods
Or to the book by Guo: http://www.worldscientific.com/worldscibooks/10.1142/8806