Uri::main() explicitly uses the uri stored in the main request, i.e. the first request fired.
Can you check what \Request::main() and \Request::active() return at that point? The first one should return the main request for your root page, the second one the current request (i.e. your widget hmvc call).