Почему возвращается Promise pending?
потому что вы вызываете асинхронные функции которые возвращают промис, и в свою очередь возвращаете промис.
Можно ли как-то избежать .then или await при использовании функции loadJSON?
можно конечно, не используйте их и все.
только данные из вызова loadJSON вы при этом не получите, потому что данные загружаются
после того как ваш console.log(loadJSON()) сработает, их просто нет еще.
Хотите получить эти данные - пишите асинхронный код вокруг console.log тоже.
console.log(await loadJSON()) например.
чтобы работало надо чтобы это было внутри функции с async или включена поддержка top-level await.