Is there any way to use hard borders for RANGE?
The correct code is:
SELECT user_id,
       created_at,
       COUNT(*) OVER (ORDER BY created_at 
                      RANGE BETWEEN '30 days' PRECEDING 
                                AND '30 days' FOLLOWING) AS qty_in_period

But this sample is wrong:
SELECT user_id,
       created_at,
       COUNT(*) OVER (ORDER BY created_at 
                      RANGE BETWEEN UNBOUNDED PRECEDING 
                                AND (reg_date+interval) FOLLOWING) AS qty_in_period

reg_date is timestamp type, interval is '1 month'.
I know, it can be done with WHERE construction but I need to check possibility to do it via window function.
Please help.

SQL window function and (date+interval) as a border of range

Is there any way to use hard borders for RANGE?

No. The documentation is explicit about it:

In the offset PRECEDING and offset FOLLOWING frame options, the offset must be an expression not containing any variables, aggregate functions, or window functions.

Attempting to use such syntax raises the following error:

ERROR:  argument of RANGE must not contain variables

One alternative uses a correlated subquery, or lateral join. The last query in your example could be written as:
select user_id, created_at, x.*
from mytable t
cross join lateral (
    select count(*) qty_in_period
    from mytable t1
    where t1.created_at <= t.created_at + t.intval
) x

