What do these dashed links indicate?
Difference between plain and dashed links
The simple answer is: Plain lines are used for links returning constant values and dashed lines for links returning variable values:
Unfortunately the documentation introduces fancy historical concepts "field" and "function flow" which today (version 3.1) add nothing for the learner but blur everything.
In your case
You had a dashed line between your two
Add nodes because your group output was expecting a variable value, so the inputs of the second
Add were expected to be variable too, and similarly the inputs of the first
As soon as you disconnect the first
Add inputs, this node can only provide a result based on the preset values 0.5 and 0.5, this result is a constant (1.0). Hence the link between the two nodes now depicts a constant value link.
Note when only one input is disconnected, the output can still be variable, and the link is still a dashed one.
In the geometry node editor a link between two nodes, whatever its nature, is the visual depiction of method calls between node objects (in the object-oriented programming sense) in the underlying program.
When connecting two nodes, we actually instruct the caller node (the one with the input) to call a method of the callee node (the one with the output) to get a value. The call may or may not require additional information, this is what the plain/dashed line depicts:
Constant value: Each time a value is needed by the caller, it is provided the same value by callee. This requires no additional information from the caller.
Variable value: Each time a value is needed by the caller, the caller provides one or more parameters to the callee. The callee computes a value based on the parameters (using some internal function indeed):
Interest of a variable value
The interest for a variable value is to be compatible with nodes which process multiple elements (vertices, faces, instances, ...) in a sequential way. Such node is able to process each element differently as long as its inputs are able to provide different values, one value for each processed element.
Example: Individual scale for each instance
E.g. the Instance On Points node is used to create instances of some secondary object for each vertex of the main object. This node doesn't process all "points" (vertices) simultaneously, the node starts a loop and processes one vertex at a time during each iteration of the loop:
It requests the geometry of the secondary object to a provider (e.g. a UV Sphere node). It also see if this newly created instance should be adjusted. For instance it looks for an individual scale factor on the
Scale input is connected to a scale provider, it calls the provider method associated with the connected provider output. If the provider is able to deliver a variable value, the node provides a parameter in the call: An incremental index, therefore different for each call.
The provider node method computes a variable value based on the parameter provided in the call, and returns this specific value.
The caller node uses this specific value to scale the specific instance.
The next vertex is processed in a new iteration of the loop until all vertices have been processed. The caller node job is then done but will be restarted whenever one of its inputs is updated, including when only one of a variable value input is updated (this monitoring task is part of the node event system).
This notion of call is essential to understand the difference between constant and variable value. It's what the documentation tries painfully to describe referring to esoteric wording "field" and "function flow" and plenty of arrows suggesting something is flowing between nodes.
This "flow" just corresponds to the calls and the returned values.
It is easier to understand when simply stated this way: Links are calls, plain links are associated with parameter-less calls and constant values, dashed links are associated with parametrized calls and variable values.