ORA-04091: table ExpenseTable is mutating, trigger/function may not see it
As the trigger says, you cannot read data from the same table as the trigger is working on as it would throw consistency out of the window.
Have you tried to put ExpenseTotal column in a view like below?
CREATE VIEW ProjectsTable_V AS
SELECT
  P.ProjectID,
  P.ProjectName,
  P.Cost,
  (
     SELECT SUM(ExpenseAmount)
       FROM ExpenseTable
      WHERE ExpenseTable.ProjectID = P.ProjectID
  ) ExpenseTotal,
  P.CostRemaining
FROM
  ProjectsTable P

If CostRemaining is Cost - ExpenseTotal you can take it out of your ProjectsTable trigger, too :)
If this is sufficient with regard to the performance, I'd prefer it over the trigger based approach any time...