1. Lookup 1 and 2 are static lookups. You can certainly populate the values in them with the gel script. Also it is possible to directly populate them on the timesheet based on certain business rules provided the lookup is already populated. The only caution I throw over here is.. the user lookup fields are quite useful for financial implementation and Rates calculation. If you are using these fields for something "nice to have", you may want to think over it as you may get stuck with those values in case in-future you want to utilize them for something financial related.
2. You cannot make the lookup values required OOTB. But there is a workaround. You can validate these values in the timesheet approval process. If they are blank, then reject the timesheet and send an email back to the resource.
3. I would not recommend giving time approval rights to the PM's. The workaround with this would be create a simple time portlet for the PMs who can see the time booked against their projects by their team members. If they disagree with the time, then they can reject the action item for them.
A couple other things which you may find useful -
1. This is common issue with timesheet which frustrates a lot of PMs. If a resource does populate, the timesheet will populate all the tasks they have been assigned to (based on the populate logic). If the resource does not remove the zero hour project tasks, it will send the PM an action item for approval which could be annoying and a lot of wasted time. There are ways to remove these time entries.
2. If the PM and RM are the same person, the timesheet approval could send them two action items. The process could be modified to avoid duplication.
Hopefully this helps!