The fundamental understanding of it. Anyone can produce some code and make things do stuff. But you still don't understand it.

I recommend the book Enterprise Javabeans 3.1 to actually gain the understanding you need. EJB is a tough subject matter comfortably hidden under a seemingly simple API layer. You gain more by understanding and learning what problem you actually solve than by investigating what the technology can do.

I guess that the EJB container is returning the same bean instance and that's why it seems that the bean is keeping its state like a stateful session bean, but it is a instance state what is being kept here.

I know basically nothing about EJB, but it's obvious to me that it wouldn't be possible (or at least it would be very difficult) for Java code to enforce that "stateless" annotation. So I have to conclude that it's there so that you can tell the EJB container whether your bean is stateless or stateful, and so that the container can handle the beans appropriately. It's up to you to write code which matches the annotation.