There's a superficial similarity but they're really very different settings.
discovery.seed_hosts is about discovery, i.e. finding the master nodes, so belongs in the
discovery.* settings namespace. It must be set on every node whether master-eligible or not because every node must perform discovery. It should be kept up to date as the cluster evolves, but it tolerates mistakes (particularly extra nodes) and need not be precisely synchronised across all nodes. It can involve an external service (e.g. DNS) which may not give wholly consistent answers, and is just one of a number of pluggable mechanisms for discovering the master nodes in a cluster.
cluster.initial_master_nodes is about cluster bootstrapping, i.e. the first election in the cluster, so belongs in the
cluster.* settings namespace. It need not be set on master-ineligible nodes because these nodes do not take part in the first election. It absolutely must not be adjusted as the cluster evolves and can be removed once the first election has taken place. It does not tolerate mistakes and must be precisely synchronised across all nodes on which it is set. It must not involve external services like DNS for consistency reasons, and it cannot be supplied by a plugin.
The mapping between master names and addresses is not "already known" to ES and cannot be automatically discovered. A node may ask another node for its name but only once it knows its address, but addresses do not uniquely and consistently identify nodes.