IMO I would say elegance is often in the eye of the beholder (it can be subjective), how you go about doing the same thing in one line or two lines is really up to you (some people prefer things spelt out for ease or reading, others prefer it shortened for ease of reading)
Doing this:
PHP:
$threads = $this->_getThreadModel()->getAllThreads();
or this:
PHP:
$threadModel = $this->_getThreadModel();
$threads = $threadModel->getAllThreads();
Really makes no difference,
they have both checked the cache (given that the helper checks the cache), but I would never substitute what looks good or clever for what is actually more efficient to process (in the above case, both are effectively the same)
I would use the 1st if I was only going to use the threadModel once in a function, and the second if I was to use it more than once (but that's just my preference for ease of reading, others may differ)
The below would not use a previously instantiated model
PHP:
$threadModel = XenForo_Model::create('XenForo_Model_Thread');
Where possible avoid this and use the helper functions (or write your own) that call getModelFromCache
When it comes to efficiency, I would keep my eye on the query count and large loops, don't worry about an extra line. When it comes to elegancance, then it's how YOU read it back that's important