For Oracle Database to use partition pruning when executing a query, you need to include the partition columns in your where clause.
1 & 2: Yes, partitioning by report_date will enable you to have partition elimination for these queries. A local index on user_id, or maybe (user_id, customer_id) is worth considering.
3 & 4: customer_id isn't in the where clause of Q4. So it's likely you'll be hitting multiple partitions by doing this. User_id is a better candidate for partitioning.
As always, make sure you test and verify in your environment before diving in and making these changes. The performance benefits may be small. Or partitioning may even make the queries slower!
Also, before doing any of this answer the question:
Why are you partitioning these tables?
Query performance is just one aspect of partitioning. Enhancing availability and manageability are other drivers for doing this.
Read up on the concepts behind these at:
http://docs.oracle.com/database/121/CNCPT/schemaob.htm#CNCPT88858 http://docs.oracle.com/database/121/VLDBG/GUID-EA7EF5CB-DD49-43AF-889A-F83AAC0D7D51.htm#VLDBG002