There is some technical information on this subject in the Arduino Library Specification:
https://arduino.github.io/arduino-cli/dev/library-specification/#source-code
This diagram made the situation more clear in my mind:

So you can see that there are two requirements for a library to be treated as having a "recursive layout":
- Presence of the library.properties metadata file ("1.5 format" library)
- Presence of the
srcsubfolder.
If both of those conditions exist then the source files are searched for under the src subfolder of the library. Take either of the two away, and the root of the library folder is instead searched.