If you write it thus:case funa(x) of
True:
begin
....
Result := True;
end;
False: Result := False;
end;
you avoid a potential double assignment to Result (in your second proposal) of first False and then True.
That is true but, in more complex logic the assignment to "result" depends on guaranteeing that one of the paths will be taken, an undesirable characteristic in the code.
Initializing/presetting the value of "result" guarantees that the value of "result" will not just be some random value in some potentially rare cases. Such conditions/bugs are often very difficult to pin down.
The OP's second option is solid, the first is inherently prone to cause problems as new conditions are added.