Hello,
Because "onAfterOrderCreate" is triggered when an order is created, it means that the order has mostly the "created" status and is not yet confirmed.
On the backend, when you create a new order, the order is fully empty, meaning that there is no user (yet).
Thus, the trigger is called in the backend but because that order is empty, you can't check the user nor the ordered items (there are none).
That's why, most of plugins are using the trigger "onAfterOrderUpdate" and check that the "order_status" is changing (between the current and the $order->old) to a "confirmed" status.
It allows to perform an action when you know that the order is beeing paid/confirmed ; and you can do the opposite actions when an order is refunded (leaving the "confirmed" statuses, to another group of order status).
By doing that, you will be also compatbile with the backend since you will create an order order, assign a user, add products and then changing the order status to "created" to "confirmed".
Regards,