The sample implementation in SRFI 0 “assumes that all existent features are built-in (here we assume srfi-0 and srfi-5 are present)”. The only conditional in the code is the pattern-matching of syntax-rules. The implementation handles and, or, and not forms by recursively expanding to cond-expand, so any supported feature clause will eventually match one of these cases:
((cond-expand (srfi-0 body ...) more-clauses ...)
(begin body ...))
((cond-expand (srfi-5 body ...) more-clauses ...)
(begin body ...))
If there is no supported feature clause, the cond-expand form will instead reduce to one of these cases:
((cond-expand) (syntax-error "Unfulfilled cond-expand"))
((cond-expand (else body ...))
(begin body ...))
This is obviously a very awkward way to implement cond-expand, but, at the time of SRFI 0, syntax-rules was the only portable way to write macros. The perspective of the SRFI system, especially in early SRFIs, is that a SRFI is a request for implementation, with the sample implementation being truly just a sample. Scheme implementers are requested to implement the interface using their implementation's specific features. SRFI 0 is a particular example of a case when distributing the sample implementation unmodified would be essentially useless.
One of the curious aspects of SRFI 0 is that it doesn't define a registry of feature symbols. I think other SRFIs may have done so, at least to a limited extent. The list recognized by Alexis’ R7RS Small implementation comes from R7RS Small Appendix B, but that appendix explicitly does not require that cond-expand recognize all of the feature identifiers corresponding to provided features (it merely forbids recognition of any feature identifier for a feature that is not provided), and Alexis’ implementation does not seem to try to be comprehensive, especially when it comes to the open-ended sets of feature identifiers.
I don't know of any specification that defines current-namespace or version as cond-expand features.
Overall, I do not recommend cond-expand as a way of structuring portable Scheme, and I recommend it even less as a way of structuring Racket. I would approach it as a construct you need to stub out so you can port code that uses it, not as a construct for making code more portable.