I'm using a "Set" command to set a default value into a given entry field. Since the field is already filled with the user parameter, I cannot use the "Default" command. But with "Set" I have the problem that a value entered by the user is overwritten with my "Set" value when the screen is displayed again. How can I avoid this?

You have to distinguish the first time the screen is displayed in the transaction (when you want to perform your Set) from the re-displays, in which you need to omit the "Set". The easiest way (requiring GuiXT version 2007 Q1 1) would be:
Use the system variable V[ _transactionid]. Its value is changed each time the user enters a new transaction. Sample coding:

if not V[_transactionid=&V[mytransactionid]]

   Set V[mytransactionid] "&V[_transactionid]"

   // Set the value into the entry field

   Set  F[...] "..."

endif