As you've found out already, we can't make callouts directly from triggers. Instead, we need to make the callout from a new (and asynchronous) transaction.
That's typically done with either
@future or a class that implements the
In any case though, it's simply not possible to get the result of your callout into the initial trigger run (the one where you decided that the callout needed to happen). The asynchronous code that actually performs the callout will need to be responsible for updating appropriate record data in Salesforce as well (which will end up causing your trigger to run again, so be careful not to get yourself into an infinite loop).
In simple cases (just take the callout result and update data, no real logic involved), as long as you have the record Id, you can perform the update without a query by setting the record Id in the SObject constructor like so.
Account myAcctToUpdate = new Account(
Id = givenId,
Name = nameFromCallout,
Phone = phoneFromCallout
Even if you do need more complex logic (and therefore need to query for the data you'll be using), since you're in a separate transaction, the governor limits are reset (a separate set of limits from those used by the trigger that started this whole process). Further, since this is an asynchronous transaction, you can use up to 200 SOQL queries (instead of the normal 100).