Service descriptor files are loaded as class resources by java.util.ServiceLoader. Therefore they have to be in the classpath. If you specify <jar ...><service .../></jar> this works correctly: the service descriptor files are JAR'd as /META-INF/services/*. However in a WAR file this is not correct. At present if you specify <war ...><service/></war> the same happens as above. The correct location in a WAR file is /WEB-INF/classes/META-INF/services/*.
You are correct but then again you are not correct to expect anything else based on the documentation 8-) Some of the inherited pieces implemented by <jar> don't make much sense in the context of <war> or <ear>. The <services> element could, but currently doesn't. Using WEB-INF/classes in the case of <war> sounds good to me.