It depends on what graphics engine you want to use.
If you just want to use the default Lazarus components, you can make use the onDraw (or sometimes it called as onPaint) event. Store all the objects' data in a list (array of object or TFPObjectList or your own create class). And paint them using the z-order you like on the onDraw event. You can move and animate each one or all of them any way you like.
Default Lazarus components aren't optimized for animation nor graphics performance. Usually, you will notice the performance issue if the total objects reaches about 10 or more. I suggest you to learn OpenGL. It's maybe the hardest but probably the fastest. I tested animation with hundreds of random moving object, it still run smoothly.