Why was per frame duplication removed?

Per frame duplication was the only way to make procedural arrays along a curve without mesh deformation and with falloff control in blender and since it was removed in 2.80 and 2.81, it seems to me that there is no way to do this anymore without jumping between versions.
Why was this feature removed without a replacement? Is there a concrete replacement or reimplementation planned for this?

It was removed because it was not compatible with new dependency graph for animation system.

To improve animation abilities and response, dependency that method implies by parenting objects and using animation interpolated from curve, at same time, was a problem.

But you can reach similar effect by using dupliverts.
Add an array modifier to a mesh made of one vertex. Of course, use a Constant Offset to create space between vertices.
Use a lattice modifier to deform that regular array of vertices and make it irregular.
Add a curve modifier to that result.
Then, make this array of vertices parent of mesh to duplicate.
Use Verts Instancing.

You should have same control. Just instead of using an animation curve to control falloff, use a lattice.

That’s a real shame. The alternative you described may work for some cases, but it seems to me like it offers less control when it comes to animation and spacing, which was very easy and intuitive to do with f-curves.
I’m hoping a better alternative will be implemented with everything nodes in the forseeable future.

In theory, no. It does not offer less control.
You can animate the lattice.
You can add other modifiers like Boolean or Mask to animate visibility of some vertices of array.

By default, Verts or Faces instancing should handle same problematic.
But I agree that’s a workaround that would satisfying that are prefering working inside 3D Viewport that with abstract curves and numerical values.

Seriously, creating an animation based on an Evaluation Curve based on a Frames property of a curve or an animation of an Offset value of a constraint of a curve to manage array of an object is not an intuitive method at all, too.

Dupliframes were very interesting for moedling when they were handling shapekeys animation but that ability disappeared in 2.5x. Reason was already a better animation system.

Everything Nodes project should allow to manage those kinds of things, easily.
Currently, what is in development is a new particle system.
Using particles is another way to create that kind of instancing.

But you can already try to use Animation Nodes from same developer.
That is a terrific add-on that is able to handle that case.