Doing Xamarin development for a few years taught me that you really need to understand the underlying operating system and how it works. Most of the consulting gigs I got were what I called "bomb squad programming" where a C# web shop decided "How hard can it be?" and embarked on a Xamarin.Form project only to discover too late what they didn't know. When I started mobile work with Xamarin this bit me as well (but I Googled my way out of it quickly enough). These weren't dumb programmers but just because you can expertly apply C# in web development doesn't mean you can instantly apply that in another kind of programming (like multi-threading, desktop, server services... or mobile). The very best Xamarin devs I knew came over from doing ObjC in Xcode or Java in Android Studio. What made them so good is that they understood at a deep level how to write mobile apps. It's like if you do Java MVC web development and switch over to ASP.NET MVC. The concepts are pretty much identical so the only hurdle is adapting to the language/syntax differences.
Really long-winded way of saying: sticking with Ionic initially and making friends with someone who can bail you out and/or mentor you on deeper understanding of the mobile operating systems will pay off.
2. Which mobile framework do you plan on using? If you’re a Java dev then Java/Android Studio is a no brainer. Also look at Dart/Flutter both for Android and iOS (and Fuchsia...)
3. A free-lance’s greatest virtue is helping the client realize the greatest return on investment. As such mobile-specific web is all the majority of clients need. Use a stack like Ionic and you get styling, a large set of plugins, a good community to assist, and an Ionic app can output mobile web as PWA or hybrid app for those cases where you need more hardware access than PWA allows or the client insists on having an app in the App Store.