Well, it depends on the purpose of your events.
If you are using events to orchestrate actions between different services, you are using events to decouple different services from each other. Such an event contains everything needed for other services to do whatever they are suppose to do. In this case, there is no need in keeping those events in a store till the end of time. As soon as the service has handled the event, itself has determined the new state of its objects and most likely stored this updated state in some kind of service specific store.
If you are using events to record actions leading to a change in the state of something, then you are doing event sourcing and things become different. While doing event sourcing, you wish to replay the stream of events to determine the state at a certain point in time instead of storing the state at that time itself. This implies that you want to replay this stream of events at any time (when you start an new instance of a service for example). In this case, events should be stored "forever".
One possible way around is to create snapshots. A snapshot represents the state of an object at a certain point in time. New actions are stored again as a stream of events in the event store, older events could be discarded. Before the retention period ends, you should update your snapshot to represent the new current state and again discard events happening before the snapshot. If you need to replay your events, you start at the known snapshot and process all succeeding events to know the new state of the object(s). One important note, using snapshots has the side effect of loosing all details that lead to a state at a point in time.
Another solution is the use of a different event store that allows you to specify the retention period...
Different frameworks exist for the event sourcing approach and "snapshotting". You should probably take a look at solutions like AxonIQ and Eventuate.
One could use events to do streaming processing. In this case you "just" want to record events at high speed like in typical IoT solutions where you capture sensor data. After ingesting this data, you want to do calculations on this stream of events, hence the name streaming processing. If you want to keep those events till the end of time depends on the use case of the project. What you could do if you are not allowed to change the retention period, is store raw events in a separate, dedicated store after ingesting them. This store is the basis for further event processing. For such use cases, you could take a look at Apache Kafka.
Hope this clears up some of your questions...