The benefit of the first approach is that you would be working with familiar URLs that are already used by WooCommerce, and things like breadcrumbs would still work.
So as you don't have a strong opinion about going with the second option, let me share with you how I would do it and if you don't like it we can change things.
First, you are going to want an alternative 'shop' page that lists product categories.
So you create a View, and for the Content Selection this View will display taxonomy terms (not posts), specifically Product Categories.
We only want to display top-level product categories here, so add a Query Filter that says the term should have no parent (see screenshot 1).
While setting up such a test I'm simply outputting the categories as text links etc., you may want to improve upon that visually.
So in the output section I simply have:
<wpv-loop>
<p>[wpv-taxonomy-link]</p>
</wpv-loop>
I insert that View on a page. Visiting it, it lists the top-level product categories, and links to their product category archives.
Now if you click on one of the links and it takes you to the product category archive, that is going to display all the products for that category.
It makes sense to me (and is certainly is easier to implement) to display the matching products whether this top-level category has any sub-categories or not.
But if it *does* have sub-categories, then before showing any matching products, it should show links to the sub-category archive page first.
So, create a custom product category archive at Toolset > WordPress Archives.
(See https://toolset.com/documentation/user-guides/getting-started-woocommerce-views/ for what's involved creating custom archive pages for WooCommerce archives.)
Go ahead and make a custom product category archive that looks how you want it to.
Right now it will be displaying the matching products for a given category. But what about displaying the sub-categories first?
For that we will need another View.
This View should, like the first, display product category terms.
This time, though, the Query Filter should be "Select taxonomy terms whose parent is the current taxonomy archive."
It should otherwise be the same, outputting links to the product category archive for the found terms, with one important difference, that you will want to output nothing if there are no found terms (and not "No items found", i.e. delete what is between the wpv-no-items-found shortcodes).
Now go back and edit your custom product category archive.
Update the Loop Editor to insert this second View after the wpv-layout-start shortcode, something like this:
[wpv-layout-start]
<h2>Sub-categories</h2>
[wpv-view name="second-level-product-categories"]
[wpv-items-found]
<!-- wpv-loop-start -->
<wpv-loop>
<h4>[wpv-post-link]</h4>
</wpv-loop>
<!-- wpv-loop-end -->
[/wpv-items-found]
[wpv-no-items-found]
<strong>[wpml-string context="wpv-views"]No items found[/wpml-string]</strong>
[/wpv-no-items-found]
[wpv-layout-end]
That should essentially achieve what you require, albeit outputting just simple links.
It should even work if you have more nesting of product categories (e.g. sub-sub-categories).