The reason this is possible is because the core application server
code base is exactly the same in all the
distributions. It is the various other 3PP (third party products) that differ. For example, the SDK bundle (it has different official name, check out http://java.sun.com/javaee for details) has other software like access manager and portal server support, whereas the EE bundle has HADB to store the state and has NSS and Load-balancer plugin among other things.

The features that enable this (amazing, IMO) feat are:

In-memory replication of conversational state.

Usage Profiles.

IIOP failover.

So, next time you need clustering support, don't look for EE, PE, SDK and GlassFish
builds do the job.
I will post more in this regard soon ...