The thing is, if you want any sort of history, or even just adequate performance, you want a database backing the application - it's not feasible to open and decode a TIFF file every time you want to view a file, or scan through versions, or do searches based on metadata, or ... It's just too much to do, compared to doing a SQL query.
The Aperture Library was just a directory, but we made it a filesystem-type as a sort of hint not to go fiddling around inside it. If you right-clicked on it, you could still open it up and see something like <1>
Masters were in the 'Masters' folder, previews (JPEGs) inside the 'Previews' folder, Thumbnails (small previews) were in the 'Thumbnails' folder. Versions (being a database object) had their own 'Versions' folder inside the 'Database' folder. This was where we had a plist per master + a plist per version describing what had been done to the master to make the version.
We didn't want people spelunking around inside but it was all fairly logically laid out. Masters could later be referenced from places outside the Library (with a lower certainty of actually being available) but they'd still have all their metadata/previews/thumbnails etc inside the Library folder.
1: https://imgur.com/a/disk-structure-within-aperture-library-m...