Group by time_id is not needed here - time_id is given in where condition - so this value is always the same.
If the number of users in IN statement is not large - than this query should be fast (even with temp table). 
Other solution is creating X such queries and run it in loop:

SELECT sum(creates) creates,sum(edits) edits,sum(deletes) deletes,sum(undeletes) undeletes 
FROM `rollup_wiki_namespace_user_events`
WHERE period_id = '2' AND wiki_id = '2237' AND time_id = '2013-08-04' AND user_id = 166

explain SELECT sum(creates) creates,sum(edits) edits,sum(deletes) deletes,sum(undeletes) undeletes  FROM `rollup_wiki_namespace_user_events` WHERE period_id = '2' AND wiki_id = '2237' AND time_id = '2013-08-04' AND user_id = 166;
+----+-------------+-----------------------------------+------+----------------------------------+---------+---------+-------------------------+------+-------+
| id | select_type | table                             | type | possible_keys                    | key     | key_len | ref                     | rows | Extra |
+----+-------------+-----------------------------------+------+----------------------------------+---------+---------+-------------------------+------+-------+
|  1 | SIMPLE      | rollup_wiki_namespace_user_events | ref  | PRIMARY,time_id,user_period_time | time_id | 18      | const,const,const,const |    3 |       |
+----+-------------+-----------------------------------+------+----------------------------------+---------+---------+-------------------------+------+-------+
1 row in set (0.00 sec)