The "missing" mainline disturbed me in the beginning also. What you have to get your head around is that THERE IS A MAINLINE. You just don't see it. The mainline is the hidden part of the Class module for the form which is standard and does all the standard stuff that is needed with every form to fill the controls and set the colors and and lock/unlock or hide/show controls and save the record and move to the next record, etc, etc, etc. The mainline code has "hooks" in it. These are places which link to events and if some event happens, the "mainline" code will execute any "user" code you have added for the event. Take a look at the names of the events. They deal with user interactions that cause the form to need to do something. So, essentially, the event code you write is a bunch of subroutines called by the hidden mainline
And you are absolutely correct. If you understand how Access works well enough to take advantage of what Access does for you, you can "vomit" front end applications. VBA is a fairly easy language because it is pretty high level and actually similar in a lot of respects to COBOL. When I was writing COBOL, I had a couple dozen or so templates. So, I never started from ground zero. I could pick the template and flesh out the details. Access is a little like that. Keep in mind though that you have to know your place. There are things that YOU have to do and there are things, that you have to allow Access to do. For example, Access doesn't know anything about your business rules. So, validation is mostly your responsibility. Defining certain properties at the table level helps with basic things like whether or not a field is required, but you need to fill in the details and the Validation rules at the table level are way too limited to be much use. So, whenever you are tempted to write code because you can, stand back and ask yourself, did the super designers who created Access in the beginning think about this and did they give me an easy way to do it with property settings or a function? If not, then try a query. Your final option is code. As I tell everyone, I've written my million lines of code and I don't need the practice so I never automatically write code that Access has written for me. One simple example is record navigation. Everyone seems to love to create their own navigation controls. Ok, once you've created the code and the button images you like you can make a template to reuse but Access has built in navigation controls that do everything you could possibly want. The question is does the look of the navigation bar offend you? More importantly, does it offend your user? If he is OK with it, don't spend his money to create your own version of something Access does for free.
Did you ever expand the COBOL instructions to see the underlying Assembler?
Every single day. I always included the BAL in the compiler print out so if I had to debug the program, I could use the memory dump and follow the logic to see what variables contained what values when the abend happened. I actually found a bug in the COBOL compiler that I got to report to IBM and was thanked profusely for the report

I don't remember the details, it was 45 years ago, but it had to do with tables and indexes and initial values in a rare case. The generated BAL was wrong! Luckily, I was able to create a work around once I saw it. There was no way I could wait for a compiler fix. One of the hardest things about Access for me in the beginning was not being able to see the "dump" when the program crashed unexpectedly.
As part of my COBOL training program, the BAL class was a required prerequisite for the advanced COBOL class because you couldn't really be a great COBOL programmer unless you understood what was happening under the covers. You had to understand the BAL that got generated and how you could affect it by modifying your COBOL to generate more efficient BAL. It was because of that early training that I can really appreciate what Access is doing for me. Once in a while, I wish Access did things differently but I have learned over the years (and have the scars to prove it) that I can't win in a fight with Access and so I should just get with the program and do it the "Access way"

Notice I never mentioned macros as an option. Some expert programmer new to Access thought I meant macros when I was trying to explain the "Access way". But to me, the logic required in macros to do anything except open a report, is so bizarre that I think it is much harder than learning VBA.
Like in my COBOL days, I have procedures that I add to many applications and even a little mini-app to manage lookup tables that goes into most new applications. like this one:
When you have several lookup tables in an application, it becomes a pain to create separate tables and maintenance forms to manage the contents. This sample is an application that I first developed over 40 years ago, long before Access was a twinkle in Bill's eye. It was constructed using...
www.access-programmers.co.uk
This app started over 40 years ago as COBOL with DB2 and with some refinements over the years, is now Access forms with a BE that depends on the database. Just upload to SQL Server if that is your BE of choice.