Why different keys are generated for initator and responder for encryption?
Well, some encryption algorithms (for example, GCM and ChaCha/Poly1305) are unsafe if multiple encryptors can use the same keys. This could be managed (in the above examples, by making sure that the two sides use different nonces, e.g. the initiator always uses even nonces and the responder always uses odd nonces), however a different method would be needed for every such encryption algorithm. It is considerably easier and more fool-proof to just have separate keys for the separate directions.
What are the explicit usage of different keys derived from SKEYSEED in IKE?
SKd - that key is used when deriving "child SAs", that is, security associations that are created as a result of this one. These can be both IKE SAs and IPsec SAs.
SKe - these are the keys used to encrypt the IKE messages
SKa - these are the keys used to add integrity protection to the IKE messages (assuming that some explicit integrity transform, such as HMAC or CMAC, is negotiated; if a combined mode such as GCM is used, this is unused and is zero length).
SKp - these are used as a part of the formula used to compute/verify the AUTH payload, which is aimed at verifying the identity of the other side (contrasted with the SKa keys, which is aimed at verified that the message send from the other side is the message that was received).