In the end, as Mehdi said, it's a decision made by the people creating the SQL Server. You can throw them wishes but there's no guarantee they will accept them.
I can only guess the reasons behind the decision but I'd think that it can be related to ensure consistent database state during the function call. One fact is that a function can be used in a select statement. Another thing is that the select statement may not alter the database state in any way. This means that the function may not create a situation where a result of another query would be different depending on the function call.
Having that said using temporary tables could cause a situation where the query results from the database could differ depending if the function is called or not, in other words if the function has modified the data in the temp table.
But the good thing is that you can always use table variables, see
DECLARE @local_variable (Transact-SQL)[
^]