I'm not really sure why they're optional. I think it has to do with the different "roles" involved in developing, packaging, and deploying an application. For the ejb-link, etc ... the spec officially says that by the time the app is deployed they need to be filled in. But, it's technically the job of the deployer "role"/person, so the developer doesn't really have much to do with it.
Then it gets messy with ejb-links to EJBs in other EARs, etc. Fun stuff. So I would imagine that it's optional so the file will validate, although the nodes should be there by the time it hits the container. I think.