Hi Nix,
I'm using Grav for a few days and my hack to external links in the (sub)menu(s) is this, using the default Quark theme in 1.4.6. I think it is usable in other themes as well.
Install the plugin "external_links" and change /user/themes/quark/templates/partials/navigation.html.twig to the following to make external links work in the menu:
{% macro nav_loop(page) %}
{% for p in page.children.visible %}
{% set active_page = (p.active or p.activeChild) ? 'active' : '' %}
{% if p.children.visible.count > 0 %}
<li>
<a href="{{ p.url }}" class="{{ active_page }}" target="{{ p.header.external_links.target }}">
{{ p.menu }}
{% if p.header.external_links.target %}
<imgX src="{{ url('plugin://external_links/assets/images/link.png') }}" />
{% endif %}
</a>
<ul>
{{ _self.nav_loop(p) }}
</ul>
</li>
{% else %}
<li>
<a href="{{ p.url }}" class="{{ active_page }}" target="{{ p.header.external_links.target }}">
{{ p.menu }}
{% if p.header.external_links.target %}
<imgX src="{{ url('plugin://external_links/assets/images/link.png') }}" />
{% endif %}
</a>
</li>
{% endif %}
{% endfor %}
{% endmacro %}
<ul {{ tree ? 'class="tree"' : '' }}>
{{ _self.nav_loop(pages) }}
</ul>
It does leave extra 'target=""' entries in the source, so if you care about that extra overload, add some more checks in that snippet.
PS: strip the last X from that <img tag... this post got refused because I'm new on the forum...
Hope it helps. Kind regards, Elko 73's