General understanding is that a Named Query (written in HQL or JPQL) is going to be optimized and converted to native sql dialect by the underlying persistence framework. A native query is something written in SQL dialect by you, over which the underlying persistence framework may not have control and hence may not be able to optimise or convert.
Further, from the
hibernate spec:
You may also express queries in the native SQL dialect of your database. This is useful if you want to utilize database specific features such as query hints or the CONNECT BY option in Oracle. It also provides a clean migration path from a direct SQL/JDBC based application to Hibernate. Note that Hibernate allows you to specify handwritten SQL (including stored procedures) for all create, update, delete, and load operations (please refer to the reference guide for more information.)