Is allowing a user to go over 3 months but limit the data to a max of 3 months acceptable? You can make a warning to state the condition in the report and/or alter the shown param dates in the report header to be a max of 3 months.
{table.date} in {?begin date} to (if {?end date} > dateadd('m',3,{?begin date}) then dateadd('m',3,{?begin date}) else {?date end})
For you warnings just use the same logic. Make a text formula field:
if {?end date} > dateadd('m',3,{?begin date}) then "You exceeded the 3 month maximun date length. The data was truncated to only show you 3 months" else ""
for dispalying the end date paramter used:
if {?end date} > dateadd('m',3,{?begin date}) then dateadd('m',3,{?begin date}) else {?date end})
Does this work?