Is this normal to have Drupal Commerce stuck in PENDING status after a completed paypal payment?
Orders aren't being "stuck" here so much as placed here for you to determine what to do with them. When you build a Drupal Commerce site, you should consider what needs to happen to an order after the checkout process has been completed / payment has been received and either implement a manual process or some form of Rules or code based automation to do it. Drupal Commerce leaves it here because we don't make any assumptions about the type of product a Commerce site sells or the business processes involved in taking an order from checkout completion to final fulfillment.

PayPal WPS and related payment gateways are a bit of a special case, too, in that you actually cannot use the "When an order is first paid in full" event to manipulate the order status. Because these orders may not have completed the checkout process when their payment notifications arrive at the site, the checkout router still depends on these orders being in a checkout order status to complete the checkout process after the payment has been processed.

Instead, if you need to update the order status based on payment receipt for PayPal WPS, you should use the "Order balance comparison" condition in conjunction with the "Completing the checkout process" event to update the order status on that event instead if payment has been received. Additionally you can use a "Data comparison" condition to check the order status on the "When an order is first paid in full" event and update the order status if the order is not still in a checkout order status.