You should be able to do this at source. So if your data is in SQL Server and you're using Crystal to connect to a View or Stored Procedure, separate the totals in that source.
I'm not sure what your SQL skills are like but you could UNION a separate query (summing the hours) onto your data source, or you could use the ROLLUP and GROUPING function to create sub-totals.
Another way that would work is if you translate your data source value of billable to TRUE and non-billable to FALSE. You could then let use the Crystal SUM([Field], [ConditionalField]) formula to group the hours for you (presumably in a new Formula Field). Although I've never used this formula it claims to group fields by the inclusion of a second conditional field that must be either a date or boolean type (that's where your TRUE/FALSE conversion comes in handy).
If you need a hand message me through the forum or reply to this thread and I'll try to help.