В принципе это относится не только к JWT, но и к любым данным, которые критично не дасть украсть.
Такие данные лучше всего хранить в secure http-only cookie. С secure думаю понятно, такая кука будет отправляться на сервер только по https, что снизит вероятность угона путем подслушивания трафика. А вот с http-only причина та же, почему не стоит использовать localStorage - не http-only кука доступна из JS, из любого JS загруженного на странице.
Что в этом плохого? Вы уверены во всех скриптах, подключенных к Вашей странице? А если сторонний сервер был взломан? А если у пользователя стоит вредоносное расширение, подменяющее определенные скрипты на всех сайтах? Соберет такой вредонос из localStorage токены Ваших пользователей, а Вам потом с ними разбираться, почему их взломали.