It certainly depends on the data structure used to represent the DAG.
We will use a data structure that I am going to call the characteristic-hash-vector (CHV). Given a graph $G$ of size $n$, and a subgraph $S \subseteq G$, the characteristic vector $X_S$ is the vector of size $n$ that has a 1 for each node in $S$ and a 0 for all other elements. The CHV is a way of representing the characteristic vector using a hashmap. Given a subset $S$, each node $v$ in $G$ is mapped to $X_S(v)$.
Let's try representing the DAG as a set of nodes, and with each node $x$, maintain a CHV for incoming nodes $y$ (there exists a directed edge from $y$ to $x$) and a CHV for outgoing nodes $w$ (there exists a directed edge from $x$ to $w$). Then, it is easy to find a node with no incoming edges. Start with any arbitrary node, and then pick any arbitrary node from its incoming CHV, and so on, until we reach a node with an empty incoming CHV. By the proof the earlier in the section, we know that this search will terminate in $O(n)$ time.
Then, we go to each node in this final node's outgoing CHV, and remove the final node from its incoming CHV (this is where we use the constant-time properties of hashmaps/CHVs). This process also takes $O(n)$ time.
Thus, we have a runtime of $O(n)$ for each iteration of the loop in the algorithm to compute a topological order for a DAG.