I think it would be instructive to talk about theory and the issues you describe. Maybe you knew all of this, maybe you didn't. Maybe it will jog you into an understanding you didn't have before, maybe it won't. I'm merely casting my bread on the waters, as the Biblical phrase goes.
First item of theory: The farther away you go from something, the harder it is to protect that something, and the less detailed control you retain.
From inside Access, you can place permissions and such on individual objects. Once you are outside Access (say, the file system of the server), you have only three viable options: The user can do nothing, or the user can read the database, or the user can modify the database. You've just lost all granularity on individual tables and other elements.
From another system, those permissions get even less granular because of the other access rights required to even be able to use Access. The directories cannot be tightly protected and still allow you to open the DB, so if you have access at all, the network will make it wide open to you.
Second item of theory: While you may be clever, the utility itself will always be closer to the problem than you are. (Exception: If you are a licensed developer who has a source kit, but don't hold your breath on that one.)
Using ULS means you are using features built-in and hard-coded into Access that occur even before you get to see or touch the data elements in your code, queries, etc.. Doing your own security cannot take away what Access does. It will only be another layer to something that happens before you can get there. There is nothing wrong with that idea, but added layering quickly builds up costs and responsiveness, not to mention complexity for future maintainers.
Just remember, all of the code you write isn't executed until Access is ready to talk to you - which means all the ULS is done, all the access arbitration is done, all of the permissions are set (or cleared). Once Access says you have no rights, code won't help. So the ONLY approach any extra layers would have would be to make decisions to DENY permissions after Access decided to grant access.
Third, ULS is still somewhat broad-brush in specific ways. You can lock an object, but you lock the whole object. That had better be what you wanted to do. Because a table is the lowest level of object that ULS locks, that had better be what you wanted to lock, because that's all you CAN lock with ULS. Not records in a recordset. ULS won't lock fields. ULS won't lock controls. You have to do that on your own if ULS isn't good enough.
Fourth, the issue of hooks. You can hook into events in things like forms and reports. Your code can be implemented in general or class modules. Macros aren't very secure. Tables and queries are even less secure. Why? Events!
You are perhaps feeling that tables and queries are not very secure. This is because you have no table-level or query-level events in which to place your "hooks" that stop unwanted events from occurring. The solution to this is to find a database package that lets you tie in via Access and ODBC, in which case if that database package supports TRIGGER events, you can add protection inside the back-end. You can implement audit trails more easily in an advanced back-end. This is the source of advice we give security-minded folks when we tell them, "Don't let your users see your tables." No events, no hooks, no protection beyond ULS, which for a given table is no access, read access, or wreak havoc access.
You plead with us to find a better way, but you need to understand the craftsman's rule. If all you've got is a hammer, you had better be working with nails.
Access is what it is. If you are willing to work like heck with VBA and also to work like heck to block direct table and query visibility, you might make some headway. But ULS is too broad brush and too simple-minded. Either "Yes" or "no" to a particular level of accessibility. That's the nature of access arbitration in secure environments.
If you want more than this, either you need another tool besides Access or you need to lower your expectations. One or the other, or both if you can find a level of compromise that makes sense.