Adding to the answer by loan, I think the question is more related to the working of generics then anything to do with webdriver. So, reading more about generics would help answer this question.
I am not sure if the below is the best explanation, but I will try to give it a shot :
When you call elementToBeClickable method it returns something like ExpectedCondition<WebElement>
.
The until method returns V. V is a generic type placeholder. So what would V hold? V is same as the one in Function<? super T, V>
Your case : Function<? super T, V>
= ExpectedCondition<WebElement>
.
Look at the definition of ExpectedCondition then,
public interface ExpectedCondition<T> extends Function<WebDriver, T> {}
So in your case, it is ExpectedCondition<WebElement>
which would mean Function<WebDriver, WebElement>
So V is WebElement and hence it returns WebElement.